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
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
/*
struct ListNode {
int val;
struct ListNode *next;
ListNode(int x) :
val(x), next(NULL) {
}
};
*/
class Solution {
public:
ListNode* deleteDuplication(ListNode* pHead)
{
if (pHead == nullptr || pHead->next == nullptr)
{
return pHead;
}
else
{
ListNode head(pHead->val - 1);
head.next = pHead;
ListNode *last = &head, *current = head.next;
while (current != nullptr)
{
if (current->next != nullptr &&current->val == current->next->val)
{
while (current->next != nullptr && current->val == current->next->val)
{
ListNode *tail = current->next->next;
// delete current->next;
current->next = tail;
}
current = current->next;
// delete current
last->next = current;
}
else
{
last = current;
current = current->next;
}
}
return head.next;
}
}
};