题目:给你一个链表的头节点 head 和一个整数 val ,请你删除链表中所有满足 Node.val == val 的节点,并返回 新的头节点 。
分析: (假如应删除的元素为6)
空列表 直接返回空
[]
头结点为应删除的元素: 方法①:添加虚拟头结点 val-1 返回时去掉
[6] [5 6]
[6 6 5 6] [5 6 6 5 6]
头节点并非需删除的元素: 方法①:统一操纵 添加虚拟头结点 val-1 返回时去掉
[5] [5 5]
[5 6 4 6] [5 5 6 4 6]
ps:添加虚拟头结点
复杂度:时间复杂度O(n) 空间复杂度O(1)
代码:
def removeElements(head, val):
# 当head为空列表时
if not head:
return head
# 不为空 添加虚拟头结点
temphead = ListNode(val-1)
temphead.next = head
preNode = temphead
while preNode.next:
if preNode.next.val == val:
preNode.next = preNode.next.next
else:
preNode = preNode.next
return temphead.next