- 删除排序链表中的重复元素 II
给定一个已排序的链表的头 head , 删除原始链表中所有重复数字的节点,只留下不同的数字 。返回 已排序的链表 。
输入:head = [1,2,3,3,4,4,5]
输出:[1,2,5]
输入:head = [1,1,1,2,3]
输出:[2,3]
提示:
链表中节点数目在范围 [0, 300] 内
-100 <= Node.val <= 100
题目数据保证链表已经按升序 排列
class Solution {
public:
ListNode* deleteDuplicates(ListNode* head) {
if (!head) {
return nullptr;
}
ListNode dummyHead(0);
ListNode* tmpHead = &dummyHead;
tuple<int, int, ListNode*> dict(head->val, 1, head);
head = head->next;
while (head) {
if (head->val == get<0>(dict)) {
++get<1>(dict);
} else {
if (get<1>(dict) == 1) {
tmpHead->next = get<2>(dict);
tmpHead = tmpHead->next;
}
dict = {head->val, 1, head};
}
head = head->next;
}
if (get<1>(dict) == 1) {
tmpHead->next = get<2>(dict);
tmpHead = tmpHead->next;
} else {
tmpHead->next = nullptr;
}
return dummyHead.next;
}
};