leedcode-移除链表元素
自己写的:
# 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
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· winform 绘制太阳,地球,月球 运作规律
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)