ソートされたリストIIから82削除重複**
https://leetcode.com/problems/remove-duplicates-from-sorted-list-ii/
タイトル説明
ソートされたリンクリストを考えると、のみ残し、重複した数字を持っているすべてのノードを削除する明確な元のリストから数値を。
リンクリストを返すだけでなくソート。
例1:
Input: 1->2->3->3->4->4->5
Output: 1->2->5
例2:
Input: 1->1->1->2->3
Output: 2->3
C ++の実装1
使用[pre, next)
すると、同じノードの値をマークするpre->next == next
記述は、pre
一意であり、に追加する必要がありdummy
、リスト。で重複ノードを削除することも問題*リンクリスト206リバースを。
class Solution {
public:
ListNode* deleteDuplicates(ListNode* head) {
if (!head || !head->next) return head;
ListNode* dummy = new ListNode(0);
auto p = dummy;
auto pre = head, next = head->next;
auto value = pre->val;
while (next) {
if (next->val == value) {
next = next->next;
} else {
if (pre->next == next) {
p->next = pre;
p = p->next;
}
pre = next;
next = next->next;
value = pre->val;
}
}
p->next = pre->next ? nullptr : pre;
head = dummy->next;
return head;
}
};