当前位置:网站首页>【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
边栏推荐
猜你喜欢
随机推荐
【企业架构框架】是什么让 TOGAF 10 成为有价值的贡献
【板栗糖GIS】arcmap—如何在表格空值处进行批量求和
ict的终极模式 是软件研发
十一、HikariCP源码分析之HouseKeeper
【移动应用开发】2022/2023 年 8 大移动应用程序开发趋势
真offer收割机 第二弹~大厂如何考察候选人?(附答案详解)
MySQL数据库进阶篇
SAP BC 源代码搜索
【MySQL系列】 MySQL表的增删改查(进阶)
【luogu P8354】多边形(容斥)(NTT优化DP)
【企业架构框架】谁推动了现代 EA 最佳实践和内容?
文献综述的写作技巧,掌握这些技巧,效率大大提高!
一文读懂Elephant Swap,为何为ePLATO带来如此高的溢价?
利用go通道channel实现互斥锁
【企业架构】描绘未来第 3 部分:产品路线图
The sequence table of the linear table (the dry goods are full of sharing ~ contains all the function codes of the sequence table~
我想申请专利,却没有经验,如何学会写专利申请文件?
毕业论文文献综述写作技巧,超级详细!
leetcode 890. Find and Replace Pattern(查找和替换pattern)
Any to Any 实时变声的实现与落地丨RTC Dev Meetup









