本文最后更新于:2021年2月6日 晚上
给定一个排序链表,删除所有含有重复数字的节点,只保留原始链表中 没有重复出现 的数字。
示例 1:
| 输入: 1->2->3->3->4->4->5 输出: 1->2->5
|
示例 2:
| 输入: 1->1->1->2->3 输出: 2->3
|
Solution
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
| class Solution { public: ListNode* deleteDuplicates(ListNode* head) { stack<ListNode *> stack; if (head==nullptr) return head; ListNode *cur = head; int pre = head->val-1;
while (cur) { if (cur->val != pre) { stack.push(cur); pre = cur->val; } else { if (!stack.empty() && stack.top()->val == cur->val) { stack.pop(); } } cur = cur->next; }
ListNode *node = nullptr; while (!stack.empty()) { ListNode *tmp = stack.top(); tmp->next = node; node = tmp; stack.pop(); } return node; } };
|
参考 liuyubobobo 、@durianyu
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
|
class Solution { public: ListNode* deleteDuplicates(ListNode* head) { if(!head || !head->next) return head; ListNode* dummyHead = new ListNode(-1, head); ListNode* pre = dummyHead, *cur = head; while(cur){ int num = 0; ListNode* p = cur; while(p && p->val==cur->val){ p = p->next; num += 1; } if(num>1) pre->next = p; else pre = pre->next; cur = p; } return dummyHead->next; } };
|