Given a sorted linked list, delete all nodes that have duplicate numbers,
leaving only distinct numbers from the original list.
For
example,
Given 1->2->3->3->4->4->5
,
return 1->2->5
.
Given 1->1->1->2->3
,
return 2->3
.
1 /**
2 * Definition for singly-linked list.
3 * struct ListNode {
4 * int val;
5 * ListNode *next;
6 * ListNode(int x) : val(x), next(NULL) {}
7 * };
8 */
9 class Solution {
10 public:
11 ListNode *deleteDuplicates(ListNode *head) {
12 if (head == nullptr || head->next == nullptr)
13 return head;
14 ListNode dummy(-1);
15 dummy.next = head;
16 ListNode *prev = &dummy, *cur = head;
17 while (cur != nullptr) {
18 bool flag = false;
19 while (cur->next != nullptr && cur->val == cur->next->val) {
20 flag = true;
21 prev->next = cur->next;
22 delete cur;
23 cur = prev->next;
24 }
25 if (flag) {
26 prev->next = cur->next;
27 delete cur;
28 cur = prev->next;
29 } else {
30 prev = cur;
31 cur = cur->next;
32 }
33 }
34 return dummy.next;
35 }
36 };
时间: 2024-10-20 00:27:09