目录
83. Remove Duplicates from Sorted List
82. Remove Duplicates from Sorted List II
1836. Remove Duplicates From an Unsorted Linked List
删除链表中的结点合集
83. Remove Duplicates from Sorted List
代码:
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* ListNode *next;
* ListNode() : val(0), next(nullptr) {}
* ListNode(int x) : val(x), next(nullptr) {}
* ListNode(int x, ListNode *next) : val(x), next(next) {}
* };
*/
class Solution {
public:
ListNode* deleteDuplicates(ListNode* head) {
if(head == nullptr)
return head;
ListNode* pre = head;
ListNode* cur = head->next;
ListNode* nex = nullptr;
while(cur){
nex = cur->next;
if(cur->val == pre->val){
pre->next = nex;
delete cur;
cur = nex;
}else{
pre = cur;
cur = nex;
}
}
return head;
}
};
82. Remove Duplicates from Sorted List II
代码:
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* ListNode *next;
* ListNode() : val(0), next(nullptr) {}
* ListNode(int x) : val(x), next(nullptr) {}
* ListNode(int x, ListNode *next) : val(x), next(next) {}
* };
*/
class Solution {
public:
ListNode* deleteDuplicates(ListNode* head) {
if(head == nullptr)
return head;
ListNode* dummy = new ListNode(-1,head);
ListNode* prepre = dummy;
int pre_val = head->val;
ListNode* pre = head;
ListNode* cur = pre->next;
ListNode* nex = nullptr;
while(cur){
nex = cur->next;
if(cur->val == pre_val){
prepre->next = nex;
if(pre){
delete pre;
pre = nullptr;
}
delete cur;
cur = nex;
}else{
if(pre){
prepre = pre;
}
pre = cur;
pre_val = pre->val;
cur = nex;
}
}
ListNode* ans = dummy->next;
delete dummy;
return ans;
}
};
1836. Remove Duplicates From an Unsorted Linked List
代码:
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* ListNode *next;
* ListNode() : val(0), next(nullptr) {}
* ListNode(int x) : val(x), next(nullptr) {}
* ListNode(int x, ListNode *next) : val(x), next(next) {}
* };
*/
class Solution {
public:
ListNode* deleteDuplicatesUnsorted(ListNode* head) {
unordered_map<int,int> count;
ListNode* cur = head;
while(cur){
count[cur->val]++;
cur = cur->next;
}
ListNode* dummy = new ListNode(-1,head);
ListNode* pre = dummy;
cur = head;
ListNode* post = nullptr;
while(cur){
post = cur->next;
if(count[cur->val] > 1){
pre->next = post;
// delete cur;
cur = post;
}else{
pre = cur;
cur = post;
}
}
ListNode* ans = dummy->next;
delete dummy;
return ans;
}
};