今天刷题时,遇到一个问题,链表不都是地址传递,当赋值不是节点时,是值传递,验证如下:
1、地址传递
function ListNode(val) {
this.val = val;
this.next = null;
}
let a = new ListNode(1);
let b = a; // 引用赋值
console.log(a,b);
b.next = new ListNode(2);
b = b.next; //节点,引用赋值
console.log(a,b);
输出结果如下,显然可见,在b新增节点后,a也一起改变了,此时都是引用赋值:
2、值传递
修改 b = b.next 顺序后,先将b赋值为null:
function ListNode(val) {
this.val = val;
this.next = null;
}
let a = new ListNode(1);
let b = a; // 引用赋值
console.log(a,b);
b = b.next; //赋值为null,值传递
b = new ListNode(2);
console.log(a,b);
输出结果如下,显然可见,当链表被赋值为数值后,就是值传递了,此时b与a就没有任何关系了,修改了b后,a也没有一起改变:
注:此处的值传递是指给链表赋值为数值时,而不是指给某一个节点赋值数值。