新人求解释,单链表固定位置插入一个节点

RoroLIU 2015-06-12 02:57:51
class link{ class node {} //外部类link,内部类node

public void insertNode(int index, String str){ //外部类link的函数insertNode()
node newnode = new node(str); //生成新节点
node tmp ; //成生一个临时节点
tmp = head; //让临时节点 = 头节点
for(int i =0 ; i < n-1; i++){
tmp =tmp.next; //找到要插入的职位的前一节点
}
newnode.next= tmp.next; //将新节点插入
tmp.next=newnode;
System.out.println();
tmp.print();
}
}
测试:本来单向链打印出来是:A B C D E F, 现在 insertNode(4,“*”);结果为:A B C * D E F
问题:我确实就是想要这个结果,网上抄来的代码确实可以用,但是不理解为什么能插入 * ?
我认为插入*后,打印原链表还是head(A)->B->C->D->E->F,感觉原链表不该有变化, tmp插入后不应该是C(tmp)-> * ->D(tmp.next)->E->F,原链表的中B 并没有连上tmp啊,为什么输出的结果里有* 呢。我感觉C 还是指向D才对。
菜鸟不太理解单向链,问的问题比较奇怪,但是真的不明白啊。。。。求解释 T.T
...全文
225 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
RoroLIU 2015-06-12
  • 打赏
  • 举报
回复
想了两天突然想明白,谢谢楼上回答,如果有人有类似疑问的,我说下我的理解。 我不是对单向链不明白,是对类理解错了,我就是疑问,为什么tmp就是C。 这里对tmp的赋值其实是引用传递,tmp,和C在栈内存里保存堆内存里的引用地址(同一个引用地址),堆内存里保存了node属性,tmp和c的操作都会对同一个堆内存进行操作。tmp将* 连上,其实就是c将* 连上。
qq_26485181 2015-06-12
  • 打赏
  • 举报
回复
*作为字符串插入到单链表里面了。
    newnode.next= tmp.next;             //将新节点插入
    tmp.next=newnode;
newnode即*, 它的下一个节点指向了C的下一个节点,即D。 tmp即C,它的下一个节点指向newnode,即*。 完成了C-->*-->D

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧