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
复制代码

 

posted @   Junior_bond  阅读(3)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· winform 绘制太阳,地球,月球 运作规律
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
点击右上角即可分享
微信分享提示