自己写的:
# Definition for singly-linked list. # class ListNode: # def __init__(self, val=0, next=None): # self.val = val # self.next = next class Solution: def removeElements(self, head: Optional[ListNode], val): # 初始化一个元组 res,包含一个布尔值和链表头部的引用 res = (True, head) # 循环调用 remove_val 方法,直到 remove_val 返回 False,表示没有找到要移除的值 while res[0]: res = self.remove_val(res[1], val) # 返回最终处理后的链表头部 return res[1] def remove_val(self, head, val): # 初始化当前节点为链表头部 cur = head # 初始化前一个节点为 None pre = None # 遍历链表 while cur != None: # 如果当前节点的值等于要移除的值 if cur.val == val: # 如果前一个节点为 None,说明要移除的值在链表头部 # 将链表头部更新为当前节点的下一个节点 if pre == None: head = cur.next else: # 如果前一个节点不为 None,将前一个节点的 next 指向当前节点的下一个节点 pre.next = cur.next # 将当前节点的 next 设为 None,断开当前节点的连接 cur.next = None # 返回 True 表示已经找到并移除了值 return True, head else: # 如果当前节点的值不等于要移除的值,更新前一个节点和当前节点的引用 pre = cur cur = cur.next # 如果遍历完链表仍未找到要移除的值,返回 False return False, head
gpt改进:在头节点前面添加一个虚拟节点 可以省掉很多麻烦
class Solution: def removeElements(self, head: Optional[ListNode], val): # 创建一个虚拟头节点,简化对头部的处理 dummy = ListNode(0) dummy.next = head # 初始化当前节点为虚拟头节点 cur = dummy # 遍历链表 while cur.next: # 如果当前节点的下一个节点的值等于要移除的值 if cur.next.val == val: # 删除当前节点的下一个节点 cur.next = cur.next.next else: # 如果当前节点的下一个节点的值不等于要移除的值,继续向后移动 cur = cur.next # 返回虚拟头节点的下一个节点作为新的头部 return dummy.next
标签:cur,val,leedcode,next,链表,移除,节点 From: https://www.cnblogs.com/yyyjw/p/18062010