[LeetCode] 83 & 84. Remove Duplicates from Sorted List I & II
Given a sorted linked list, delete all duplicates such that each
element appear only once.For example, Given 1->1->2, return 1->2. Given 1->1->2->3->3, return
1->2->3.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.
链表操作,画个示意图自己推一下吧。
- 只要last和now指针,当last->val == now->val,last->next = now->next, delete now即可。
- 比1.复杂一点,多一个pre指针,和一个isDup指示器。
class Solution {
public:
ListNode* deleteDuplicates(ListNode* head) {
ListNode* last = head;
if (last == NULL) return head;
ListNode* now = last->next;
if (now == NULL) return head;
while (now) {
if (now->val == last->val) {
last->next = now->next;
delete now;
now = last->next;
} else {
last = now;
now = now->next;
}
}
return head;
}
};
class Solution {
public:
ListNode* deleteDuplicates(ListNode* head) {
ListNode* last = head;
if (last == NULL) return head;
ListNode* now = last->next;
if (now == NULL) return head;
ListNode* pre = NULL;
bool isDup = false;
while (now != NULL) {
if (last->val == now->val) {
isDup = true;
last->next = now->next;
delete now;
now = last->next;
} else {
if (isDup) {
if (last == head) {
head = now;
} else {
pre->next = now;
}
delete last;
} else {
pre = last;
}
last = now;
now = now->next;
isDup = false;
}
}
if (isDup) {
if (last == head) {
head = now;
} else {
pre->next = now;
}
delete last;
}
return head;
}
};