借助哑节点+map,遍历两次链表即可:
ps: 做的时候没看到这是个升序序列,升序序列直接用指针进行断链、删除、合并操作即可
// // Created by jt on 2020/9/24. // #include <unordered_map> using namespace std; class Solution { public: /** * * @param head ListNode类 * @return ListNode类 */ ListNode* deleteDuplicates(ListNode* head) { // write code here ListNode *p = head; ListNode dummy(0); ListNode *q = &dummy; unordered_map<int, int> mp; // 第一次遍历,记录各元素出现次数 while (p) { ++mp[p->val]; p = p->next; } // 第二次遍历,删除重复节点 p = head; while (p) { if (mp[p->val] > 1) { ListNode *tmp = p->next; delete p; p = tmp; } else { q->next = p; q = p; p = p->next; } } q->next = nullptr; return dummy.next; } };