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

题目

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

示例 1:

img
1
2
输入:head = [1,2,3,3,4,4,5]
输出:[1,2,5]

示例 2:

img
1
2
输入:head = [1,1,1,2,3]
输出:[2,3]

提示:

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

题解

这题用到双指针的思想,但是代码里用的nextnext.next

记录当前的值,如果紧邻的后面的值和当前值一样,那就删掉,这里用的cur.next = cur.next.next

而且用的是循环删除。因为可能当前的值也需要进行删除,所以处理的时候用的cur.next表示当前的值,这里不要搞混。

删除的时候的循环条件是下一个值不为空,而且下一个值跟当前值一样。

整体的循环条件是cur.next != null && cur.next.next != null

1
2
3
4
5
6
7
8
9
10
11
12
13
14
class Solution {
public ListNode deleteDuplicates(ListNode head) {
ListNode dummy = new ListNode(0, head), cur = dummy;
while (cur.next != null && cur.next.next != null) {
int val = cur.next.val;
if (cur.next.next.val == val)
while (cur.next != null && cur.next.val == val)
cur.next = cur.next.next;
else
cur = cur.next;
}
return dummy.next;
}
}

LeetCode-82-删除排序链表中的重复元素II
https://excelius.xyz/leetcode-82-删除排序链表中的重复元素ii/
作者
Ther
发布于
2024年7月21日
许可协议