203. 移除链表元素
题目:
给你一个链表的头节点 head
和一个整数 val
,请你删除链表中所有满足 Node.val == val
的节点,并返回 新的头节点 。
解题:
核心思想:遍历列表,遇到符合题目条件的删除
细节:
- 要在头节点前设立头指针,为了在链表中第一个节点就要被删时服务
- 删除节点时,我们通常需要前一个节点的指针。所以,我们通常直接基于“前一个指针”,然后直接对后面的节点进行判断,符合条件的直接删除
- 推动循环的条件不是统一的
cur = cur.next
。我们只在确定了下一个节点不会被删除后,才会移动指针,否则,就不停的进行判断 - 循环语句判断条件
cur.next
是建立在第3点条件下的,对全局的一个判断,即其不会与循环内的语句冲突从而报错。
代码:
class Solution:
def removeElements(self, head: ListNode, val: int) -> ListNode:
res = ListNode(None, head)
cur = res
while cur.next:
if cur.next.val == val:
cur.next = cur.next.next
else:
cur = cur.next
return res.next