LeetCode Python - 82. 删除排序链表中的重复元素 II

目录


题目描述

给定一个已排序的链表的头 head , 删除原始链表中所有重复数字的节点,只留下不同的数字 。返回 已排序的链表 。

示例 1:

输入:head = 1,2,3,3,4,4,5

输出:1,2,5

示例 2:

输入:head = 1,1,1,2,3

输出:2,3

提示:

  • 链表中节点数目在范围 0, 300
  • -100 <= Node.val <= 100
  • 题目数据保证链表已经按升序 排列

解法

我们先创建一个虚拟头节点 dummy,令 dummy.next=head,然后创建指针 pre 指向 dummy,指针 cur 指向 head,开始遍历链表。

当 cur 指向的节点值与 cur.next 指向的节点值相同时,我们就让 cur 不断向后移动,直到 cur 指向的节点值与 cur.next 指向的节点值不相同时,停止移动。此时,我们判断 pre.next 是否等于 cur,如果相等,说明 pre 与 cur 之间没有重复节点,我们就让 pre 移动到 cur 的位置;否则,说明 pre 与 cur 之间有重复节点,我们就让 pre.next 指向 cur.next。然后让 cur 继续向后移动。继续上述操作,直到 cur 为空,遍历结束。

最后,返回 dummy.next 即可。

时间复杂度 O(n),其中 n 为链表的长度。空间复杂度 O(1)。

python 复制代码
# Definition for singly-linked list.
# class ListNode(object):
#     def __init__(self, val=0, next=None):
#         self.val = val
#         self.next = next
class Solution(object):
    def deleteDuplicates(self, head):
        """
        :type head: ListNode
        :rtype: ListNode
        """
        dummy = pre = ListNode(next=head)
        cur = head
        while cur:
            while cur.next and cur.next.val == cur.val:
                cur = cur.next
            if pre.next == cur:
                pre = cur
            else:
                pre.next = cur.next
            cur = cur.next
        return dummy.next
        

运行结果

相关推荐
IvanCodes1 小时前
Python 数据处理(十三):JSON、CSV 与数据序列化
开发语言·python
Patrick在香港2 小时前
Claude 工具调用返回空:8 次失败里只有 1 次状态码不对,其余全带 200
爬虫·python·api·claude·香港
Web3&Basketball2 小时前
CRM Agent 后训练实战:3 倍更少错误
python·架构·大模型·agent·推理
AIFQuant3 小时前
ETF行情API接入踩坑记:从报错到跑通的七个问题
python·金融·区块链·etf·基金
无敌贵点大王3 小时前
RTThread学习记录11——RT-Thread 设备模型吃透:UART/ADC/PWM/PIN 到底有什么区别?
c语言·stm32·学习·链表
GPU实战笔记4 小时前
云端 Python 开发:JupyterLab 还是 VS Code Remote-SSH?
python·vs code·jupyterlab·remote-ssh·远程开发
狗狗狗狗狗乐啊5 小时前
搭一个 AI 对话工作台 AChat:从 0 到可用的完整记录(一)
python·react.js·ai编程
白猫不黑5 小时前
Python实现简易Web弱口令爆破与防护方案
python·web安全·计算机·网络安全·黑客·信息安全·渗透测试
kuuailetianzi6 小时前
Python初识:定位、优势与发展历程
python
guoran_shini6 小时前
LLM微调-训练垂类问答模型
python·lora·sft