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 node 吗?
是需要的, 因为如果开始就有几个重复的节点, 那么可能是会将头节点删除的
实现思路:
初始化cur 为dummy node , 判断下一个节点和下下个节点的值是否相等
如果一样就套一个循环, 不断的删除节点, 知道遇到没有节点或者遇到的节点不一样
如果后面那两个节点的值不一样,cur就移动到下一个节点, 直到后面不足两个节点为止
class Solution {public ListNode deleteDuplicates(ListNode head) {ListNode dummy = new ListNode(0, head);ListNode cur = dummy;while (cur.next != null && cur.next.next != null) {int val = cur.next.val;if (cur.next.next.val == val) { // 后两个节点值相同// 值等于 val 的节点全部删除while (cur.next != null && cur.next.val == val) {cur.next = cur.next.next;}} else {cur = cur.next;}}return dummy.next;}
}
作者:灵茶山艾府
链接:82. 删除排序链表中的重复元素 II - 力扣(LeetCode)
来源:力扣(LeetCode)