本题采用伪头指针的方法,利用双指针进行删除节点
其实 删除节点并非难题,本题的难题是如何处理头节点就是待删除元素的链表
为此,我们设立一个伪头指针faker
令faker的值为val+1,令faker的next纸箱head
,这样保证faker一定是链表中第一个不需要删除的节点
下面的工作就是用cur和last双指针进行操作
最后返回faker的next
# Definition for singly-linked list.
# class ListNode:
# def __init__(self, x):
# self.val = x
# self.next = None
class Solution:
def removeElements(self, head: ListNode, val: int) -> ListNode:
if head == None:
return None
faker = ListNode(val + 1)
faker.next = head
print(faker.next.val)
cur = head
last = faker
while cur is not None:
if cur.val != val:#如果当前节点不需要删除,更新last
last.next = cur
last = cur
else:#如果当前节点要删除,
last.next = None
cur = cur.next
return faker.next