leetcode 83和84 Remove Duplicates from Sorted List 和leetcode 1836
目录
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;}
};