题目
题目描述
给定一个已排序的链表的头 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 node)和两个指针来遍历链表。哑节点的目的是简化某些边界条件的处理,比如当头节点需要被删除时。两个指针中,一个用于追踪当前正在检查的节点(prev),另一个用于探索下一个节点是否重复(curr)。
算法步骤:
- 创建哑节点:创建一个哑节点
dummy指向链表的头节点。这样即使头节点是重复的也可以方便地进行删除操作。 - 初始化指针:设置
prev = dummy,它将用来跟踪最后一个唯一节点的位置;curr = head,它是当前正在检查的节点。 - 遍历链表:
- 如果
curr和curr.next都存在且它们的值相等,则继续前进curr直到找到不同的值或到达链表末尾,并设置prev.next指向这个不同的节点或者null。 - 否则,如果
curr的值不重复,则移动prev到curr位置,并将curr向前移动一位。
- 如果
- 返回结果

最低0.47元/天 解锁文章
3万+

被折叠的 条评论
为什么被折叠?



