题解 | #删除有序链表中重复的元素-II#
删除有序链表中重复的元素-II
https://www.nowcoder.com/practice/71cef9f8b5564579bf7ed93fbe0b2024
建立一个容器vector<pari<int,int>> list,pair.first记录链表节点的值,pair.second记录这个值出现的次数。
将链表的值都录入list。
list迭代,将pair.second==1的值新建节点,并连接到新链表。
#include <vector> class Solution { public: ListNode* deleteDuplicates(ListNode* head) { vector<pair<int, int>> list; auto p = head; while (p != nullptr) { if (list.empty()) { list.push_back(make_pair(p->val, 1)); p = p->next; continue; } int index = findByKey(list, p->val); if (index == -1) { list.push_back(make_pair(p->val, 1)); } else { list[index].second++; } p = p->next; } ListNode* Head = nullptr; ListNode* q = nullptr; for (auto& i : list) { if (i.second == 1) { if (q == nullptr) { auto r = new ListNode(i.first); Head = r; q = Head; } else { auto r = new ListNode(i.first); q->next = r; q = r; } } } return Head; } int findByKey(vector<pair<int, int>>& list, int key) { if (list.empty()) { return -1; } for (int i = 0; i < list.size(); i++) { if (list[i].first == key) { return i; } } return -1; } };