0%

删除链表中重复的结点

题目描述

在一个排序的链表中,存在重复的结点,请删除该链表中重复的结点,重复的结点不保留,返回链表头指针。 例如,链表1->2->3->3->4->4->5 处理后为 1->2->5

解答

这道题不复杂,就是要细心,有很多边界条件需要判断,容易出错。

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
public ListNode deleteDuplication(ListNode pHead) {
if (pHead == null) {
return null;
}
ListNode p, pHeadAns = null, ptail = null;
for (p = pHead; p != null; ) {
int count = 0;//与p.val相等的节点数
ListNode pp;
for (pp = p; pp != null && pp.val == p.val; pp = pp.next) {
count++;
}
if (count == 1) {//待加入新链表
if (pHeadAns == null) {
pHeadAns = p;//待返回的头结点
} else {
ptail.next = p;
}
ptail = p;//新链表当前的尾结点
ptail.next = null;
}
//删除(跳过)连续的相等节点
p = pp;
}
return pHeadAns;
}