【算法03天:Day3】第二章链表 LeetCode 移除链表元素(203)

68 阅读1分钟

题目一:

image.png

链表解题思路:

链表的题目,如果是删除时,都会考虑到头结点的情况,需要特殊考虑。但如果不想特殊考虑的时候,可以在头结点前面,设置一个虚拟头结点dummy结点指向头结点,这样就可以统一处理了。

对于链表的题目,最好是用笔画一画,弄清楚各个指针指向哪些结点,如何变化,循环结束的条件是什么。

解法一:(迭代含虚拟头结点)

解题思路: 这个题目是删除链表中目标值为val的结点,删除结点情况下,需要先保存当前结点的前一个结点,因为删除当前结点,只需要将当前结点的前一个结点的指针,指向当前结点的下一个结点即可,如果使用dummy结点,注意最后返回时,返回的是dummy.next,这才是真正的头结点。

image.png

这个题其实还可以不要额外申请空间,如代码所示。

image.png

解法二:(迭代不含虚拟头结点)

思路:去掉链表头部值为target的节点,最终得到的列表头是可以返回的; 去掉非链表头部的节点,主要是判断下一个节点(p.next)的值是否为target,如果是的话把当前节点的next指向下下一个节点(p.next.next)。

image.png

image.png

解法三:(递归)

image.png

总结:链表的题都需要好好比划比划,在纸上画一画能更好地理解。递归解法一般都想不到。