1.head是头结点,指向第一个元素,head结点不能移动,为了保证链表结构的完整性,所以引入dummy结点充当哨兵,这时head结点就成普通结点了。
2.为了方便删除元素,再引入一个prev指针放在head之前。
3.如果遇到指定元素,则如图所示删除,如果没遇到,则prev和next一起往前移动。
4.遍历完整个链表,输出dummy.next。
伪代码:
dummy = ListNode()
dummy.next = head
prev = dummy
while(head != null):
if(head.val == val):
prev.next = head.next
head = head.next
else:
prev = head
head = head.next
return dummy.next
Python代码:
def removeElements(self, head: ListNode, val: int) -> ListNode:
dummy = ListNode()
dummy.next = head
prev = dummy
while(head != None):
if(head.val == val):
prev.next = head.next
head = head.next
else:
prev = head
head = head.next
return dummy.next