转码刷 LeetCode 笔记[2]:203. 移除链表元素(python)

题目

第一次错解

移除链表节点,一般用的方法是,把前驱节点的指针域指向目标节点的下一个节点。先创建虚拟头节点,指向头节点,然后通过循环找到等于 val 的节点。

python 复制代码
# 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: int) -> Optional[ListNode]:
        dummy = ListNode(0)  # 虚拟头节点
        dummy.next = head  # 此时,链表head从dummy开始
        current = dummy  # 还是应该写成 current = dummy?
        # for current in head:
        while(current.next):
            if current.next.val == val:
                current.next = current.next.next
            current = current.next
        return head

错哪了?

  1. 返回值错了

如果链表开头的节点就等于 val ,那在循环中,这个旧的 head 节点就不在链表里了,所以不能返回这个被废弃的 head 节点。而应该改成 dummy.next,它表示此时真正的头节点。

  1. 删除结点之后,current 无需右移

因为 current.next = current.next.next 已经删除了一个节点,如果再次右移,就会在循环中漏掉一个节点。

第二次修正

python 复制代码
# 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: int) -> Optional[ListNode]:
        dummy = ListNode(0)  # 虚拟头节点
        dummy.next = head  # 此时,链表head从dummy开始
        current = dummy  # 还是应该写成 current = head?
        # for current in head:
        while(current.next):
            if current.next.val == val:
                current.next = current.next.next
            else:
                current = current.next
        return dummy.next

现在是正确的了!

相关推荐
我真的是大笨蛋4 小时前
K8S笔记-容器和镜像
笔记·云原生·容器·kubernetes
微笑伴你而行5 小时前
小土堆目标检测笔记
笔记·目标检测·目标跟踪
野犬寒鸦7 小时前
力扣hot100:缺失的第一个正数(哈希思想)(41)
java·数据结构·后端·算法·leetcode·哈希算法
一枝小雨8 小时前
【C++】编写通用模板代码的重要技巧:T()
开发语言·c++·笔记·学习笔记
天若有情6738 小时前
《JAVA EE企业级应用开发》第一课笔记
java·笔记·后端·java-ee·javaee
白菜帮张同学10 小时前
LP嵌入式软件/驱动开发笔试/面试总结
数据结构·驱动开发·经验分享·笔记·学习·算法·面试
喜欢你,还有大家11 小时前
Linux笔记14——shell编程基础-8
linux·前端·笔记
岁月静好202511 小时前
Leetcode二分查找(3)
算法·leetcode·职场和发展
一支鱼11 小时前
leetcode-4-寻找两个正序数组的中位数
算法·leetcode·typescript
会员果汁14 小时前
leetcode-每日一题-3025. 人员站位的方案数 I-C语言
c语言·算法·leetcode