Leetcode 203 移除链表元素
解法1 O(N) O(1)
class Solution:
def removeElements(self, head: Optional[ListNode], val: int) -> Optional[ListNode]:
# head头结点
#self.val = val
#self.next = next
# 需要对于头结点单独操作(如果头结点=val的话 就没办法断开指针重新连接)
while head is not None:
if head.val == val:
head = head.next # 直接右移一个head
else:
break
# 在原来链表前面引入一个虚拟节点dummy
# 引入一个prev头 在head前,删除元素时:令prev.next=head.next
dummy = ListNode(-1)
dummy.next = head
prev = dummy
now = head
while now is not None:
if now.val == val:
prev.next= now.next
else:
prev = prev.next
now = now.next
return head # 返回新的头结点
解法2 O(N) O(1)
# 引入一个prev头 在head前,删除元素时:令prev.next=head.next
# 在原来链表前面引入一个虚拟节点dummy
dummy = ListNode(-1)
dummy.next = head
prev = dummy
# 之后不断遍历head 最后返回的是dummy.next,相当于一开始存下来了head
while head is not None:
if head.val == val: #删除元素
prev.next= head.next
else:#继续遍历
prev = prev.next
head = head.next # head头继续移动
return dummy.next # 返回