反转单链表:为什么用新节点保存头插节点的下一个,而不是头插节点本身呢?

  在看尚硅谷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将绑定在一起,链表会因此断开!
  
posted @ 2021-02-01 21:14  属灵  阅读(155)  评论(0)    收藏  举报