反转单链表:为什么用新节点保存头插节点的下一个,而不是头插节点本身呢?
在看尚硅谷Java数据结构单链表反转的时候,有一个疑问
为什么用新节点保存头插节点的下一个,而不是头插节点本身呢?即,斜体部分为什么不直接node=temp呢?
//反转单链表:遍历原链表,把每一个节点都头插到新链表上,再把head.next指向新链表的第一个元素节点
public void reverse(){
//如果为空或只有一个,不需要反转
if(head.next==null || head.next.next==null){
return;
}
HeroNode temp=head.next;
HeroNode reverseHead=new HeroNode(0,null,null);
HeroNode node=null;
while(temp!=null){
//用node暂存temp.next
node=temp.next;
//把temp头插到reverseHead
temp.next=reverseHead.next;
reverseHead.next=temp;
//移动指针
temp=node;
}
head.next=reverseHead.next;
}
原来,Java是引用传递,输出下面代码:
Person p1=new Person();
p1.name="张三";
Person p2=p1;
p2.name="李四";
System.out.println(p1.name); //结果为李四
因为Java是引用传递,所以p1和p2是同一个对象,p2.name改变,p1.name也随之改变。
本例中,如果node=temp,那么node和temp将绑定在一起,链表会因此断开!
浙公网安备 33010602011771号