一.引用
学习数据结构还是得多画图.想了个半天,最后还是画图解决
我就是一直不明白为什么对tmp的操作,会影响到newhead.其实原理很简单,是我把赋值和引用弄混了
tmp=newhead.就是意思tmp得到了newhead在堆上的引用
对tmp或者对newhead的操作都会改变在堆上的对象
tmp后续的操作会让tmp在堆上的引用从newhead变到其他地方,但是newhead始终是指向原先的对象,
tmp在走之前已经把那个对象的next指向了下一个,所以返回newhead没毛病
代码题
class Solution {
public static ListNode mergeTwoLists(ListNode headA, ListNode headB) {
ListNode Newhead=new ListNode(-1);//防止后期空指针异常
ListNode tmp=Newhead;//new在堆上创建了一个新的对象,引用指向了那个对象,tmp也同时指向了它
// 后续操作的时候,tmp会改变对象.但是Newhead始终都指向那个虚拟节点
while(headA!=null&&headB!=null){
if(headA.val<headB.val){
tmp.next=headA;
headA=headA.next;
tmp=tmp.next;
}else{
tmp.next=headB;
headB=headB.next;
tmp=tmp.next;
}
}
if(headB!=null){
tmp.next=headB;
}
if(headA!=null){
tmp.next=headA;
}
return Newhead.next;
}
}