1 回答

TA贡献1847条经验 获得超7个赞
可视化列表的构建方式可能会有所帮助:
让输入是一个列表,其中包含值 [3, 9] 和另一个只有 [4] 的列表:
l1
↓
3 → 9 → null
l2
↓
4 → null
在循环开始之前创建一个新节点:
head
↓
-1
↑
dummy
循环将进行第一次迭代,并且if条件为真。首先dummmy.next是适配,导致出现这种情况:
head l1
↓ ↓
-1 → 3 → 9 → null
↑
dummy
l2
↓
4 → null
...然后l1重新分配一个新的参考:
head l1
↓ ↓
-1 → 3 → 9 → null
↑
dummy
l2
↓
4 → null
循环中的最后一条语句为 分配了一个新引用dummy:
head l1
↓ ↓
-1 → 3 → 9 → null
↑
dummy
l2
↓
4 → null
循环第二次迭代,if现在条件为假,所以我们进入else代码块。Firstdummmy.next被改编(这打破了它与 的链接l1,所以我移动了l1和的可视化l2):
head l2
↓ ↓
-1 → 3 → 4 → null
↑
dummy
l1
↓
9 → null
...然后l1重新分配一个新的引用,在这种情况下它变成null:
head l2
↓ ↓
-1 → 3 → 4 → null
↑
dummy
l1
↓
9 → null
循环中的最后一条语句为 分配了一个新引用dummy:
head l2
↓ ↓
-1 → 3 → 4 → null
↑
dummy
l1
↓
9 → null
在此阶段,循环条件不再为真 ( l2is null),因此if执行循环后面的块。这dummy.next与其余(不是null)参考链接。同样,为了可视化,我交换了l1和的位置l2:
head l1
↓ ↓
-1 → 3 → 4 → 9 → null
↑
dummy
l2
↓
null
现在我们到了最后的声明:return head.next。请注意headdid 从未离开在开始时创建的新节点。
所以返回的引用是:
head l1
↓ ↓
-1 → 3 → 4 → 9 → null
↑
returned
l2
↓
null
注意head在这个函数的整个执行过程中如何一直指向带有 -1 的节点。head值为 -1 的临时节点将被垃圾回收,因为一旦函数返回(是局部变量) ,就没有变量再引用它。
添加回答
举报