删除有序链表中重复出现的元素
删除有序链表中重复出现的元素
http://www.nowcoder.com/questionTerminal/71cef9f8b5564579bf7ed93fbe0b2024
借助哑节点+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;
}
};刷遍天下无敌手 文章被收录于专栏
秋招刷题历程

查看11道真题和解析