标题很疑惑为什么给tmp.next赋值,原head也会改变。
研究会才想明白,原链表head是储存在堆内存中,tmp = head,只是将tmp和head具有同一个引用地址,后续对tmp的操作,即也是对这个引用地址中数据的操作,故原head数据也会改变。
我用list模拟了这个问题
public static void main(String[] args) {
List<String> list = new ArrayList<>();
list.add("a");
list.add("b");
list.add("c");
list.add("d");
List<String> nw = list;
nw.add("w");
System.out.println("list:" + JSON.toJSON(list));
System.out.println("list.hashcode:"+list.hashCode());
System.out.println("new:" + JSON.toJSON(nw));
System.out.println("new.hashcode:"+nw.hashCode());
}
打印结果
hash值是一样的,可见这两个list是指向同一个地址的。无论对谁操作,都会改变其中数据