leetcode203链表节点待删除待问题?

来源:2-1 Leetcode中和链表相关的问题

_风中叶

2020-12-30 11:38:19

老师,leetcode203的问题,我的18行没有将delNode.next置空而是将delNode置空也是可以通过提交的。

我理解的是我的 头节点都已经指向头节点的下一条节点了,直接将delNode置空就可以了,为什么delNode还要next一下再去置空,会不会有一点多余?

http://img.mukewang.com/climg/5febf539090bf20533501690.jpg

写回答

1回答

liuyubobobo

2020-12-30

首先,这句话不写是没有关系的。写这句话可以帮助 GC 更快地回收删除节点。


其次,如果你想让 delNode 和链表断开,逻辑应该是 delNode->next = null。delNode = null 没有对原链表作改变。


比如,delNode 指向节点 2 的话:

1 -> 2 -> 3 -> 4 -> 5 -> null
^
|
delNode


运行 delNode = null 的结果,只不过让 delNode 指向了 null,没有让 2 和链表断开。


1 -> 2 -> 3 -> 4 -> 5 -> null

delNode -> null


而 delNode.next = null,因为 delNode 指向节点 2,才真的将 2.next 指向 null,才让 2 和整个链表断开:


1 -> 2 -> null (XXX 断开了) 3 -> 4 -> 5 -> null
^
|
delNode



对此,你可以再看一遍 1-5 的动画演示;


另外,这个问题其实和我在 2-9 讲的问题有相似之处,届时你也可以再仔细体会一下。


继续加油!:)

0

算法与数据结构

波波老师5年集大成之作,算法与数据结构系统学习,考试、面试、竞赛通用

2638 学习 · 1091 问题

查看课程