当前位置:网站首页>【leetcode】82. 删除排序链表中的重复元素 II(中等)
【leetcode】82. 删除排序链表中的重复元素 II(中等)
2022-07-29 22:46:00 【friedrichor】
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
- 题目数据保证链表已经 按升序排列
思路&代码
# Definition for singly-linked list.
# class ListNode:
# def __init__(self, val=0, next=None):
# self.val = val
# self.next = next
class Solution:
def deleteDuplicates(self, head: ListNode) -> ListNode:
if head == None or head.next == None:
return head
# 由于链表头可能是重复元素,可能把 head 也删掉,这里定义一个新的链表头接在 head 前面
# 返回时只需要返回new_head.next即可
new_head = ListNode(0, head)
q = new_head # 用来形成 “新” 链表
p1 = head # 用来判断是否为重复元素,永远指向每种数字的第一个
p2 = head.next # 用来遍历
while p2:
if p1.next.val != p1.val: # 该元素不重复
q.next = p1
q = q.next
p1 = p1.next
p2 = p1.next
else: # 这里的工作是把p2和p1移向新的数字
while p2 and p2.val == p1.val:
p2 = p2.next
if p2 == None: # 这里是判断是否到了最后一个元素,并且最后的元素是重复的
# 如 [1,2,3,3,4,4] 到最后的 4 时就是这种情况
q.next = None
break
p1 = p2
p2 = p1.next
if p2 == None: # 这里是将p2指向新的元素了,并且是最后一个元素且不重复
# 如 [1,2,3,3,4,4,5] 到最后的 5 时就是这种情况
q.next = p1
return new_head.next
边栏推荐
猜你喜欢
随机推荐
九、HikariCP源码分析之ConcurrentBag二
GTK在drawable区域绘图
Redis和MySQL如何保持数据一致性
C语言实现扫雷(9*9)游戏——详解
四、HikariCP源码分析之初始化分析一
Baidu Intelligent Cloud Zhangmiao: Detailed explanation of enterprise-level seven-layer load balancing open source software BFE
MySQL数据库进阶篇
都有哪些查找和下载英文文献的方法?
COPU陆首群教授应邀在ApacheCon Asia会议上致辞
OR62 倒置字符串
将文件流转成file文件后使用luckysheet回显数据
【MySQL系列】 MySQL表的增删改查(进阶)
kaniko --customPlatform参数:支持不同平台的镜像构建(如:arm等)
@Accessors 注解详解
我想申请专利,却没有经验,如何学会写专利申请文件?
cmd md命令
C语言快速入门(为了看源码)
【板栗糖GIS】arcmap—如何在表格空值处进行批量求和
ah?Now the primary test recruitment requirements will be automated?
high-level-rest-client 判断索引是否存在






![[C] list explanation (headless ChanXiangFei cycle)](/img/41/14d1968296deb0135da0694fc6ccaf.png)


