文章524
标签277
分类67

算法:删除链表中重复的结点


删除链表中重复的结点

删除链表中重复的结点

在一个排序的链表中,存在重复的结点,请删除该链表中重复的结点,重复的结点不保留,返回链表头指针。

例如,链表1->2->3->3->4->4->5 处理后为 1->2->5


分析

构建一个哨兵节点scott;

然后建立cur节点和curNext节点, 每次判断curNext是否与后面的相同, 进行跳过节点


代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
public class Solution {
public ListNode deleteDuplication(ListNode pHead) {
if (pHead == null || pHead.next == null) return pHead;

ListNode scott = new ListNode(0);
scott.next = pHead;

ListNode cur = scott, curNext = pHead;

while (curNext != null) {
// 出现重复
// cur.next.val == cur.next.next.val
if (curNext.next != null && curNext.val == curNext.next.val) {
// 跳过操作
while (curNext.next != null && curNext.val == curNext.next.val) {
curNext = curNext.next;
}
// 添加不重复元素
cur.next = curNext.next;
curNext = curNext.next;
} else {
// 不重复
cur = cur.next;
curNext = curNext.next;
}
}
return scott.next;
}
}

本文作者:Jasonkay
本文链接:https://jasonkayzk.github.io/cn/1996/07/27/%E7%AE%97%E6%B3%95-%E5%88%A0%E9%99%A4%E9%93%BE%E8%A1%A8%E4%B8%AD%E9%87%8D%E5%A4%8D%E7%9A%84%E7%BB%93%E7%82%B9/
版权声明:本文采用 CC BY-NC-SA 3.0 CN 协议进行许可