题目描述

编写代码,移除未排序链表中的重复节点。保留最开始出现的节点。

示例1:

输入:[1, 2, 3, 3, 2, 1]
输出:[1, 2, 3]

示例2:

输入:[1, 1, 1, 1, 2]
输出:[1, 2]

提示:

  • 链表长度在[0, 20000]范围内。
  • 链表元素在[0, 20000]范围内。

进阶:

  • 如果不得使用临时缓冲区,该怎么解决?

解答 By 海轰

提交代码

ListNode* removeDuplicateNodes(ListNode* head) {
unordered_set<int> s;
ListNode* ans=head;
ListNode* pre;
while(head)
{
if(s.find(head->val)==s.end())
{
s.insert(head->val);
pre=head;
head=head->next;
}
else
{
pre->next=head->next;
head=head->next;
}
}
return ans;
}

运行结果

LeetCode刷题(166)~移除重复节点_编写代码


提交代码(暴力)

ListNode* removeDuplicateNodes(ListNode* head) {
ListNode* a=head;
while(a)
{
ListNode* b=a;
while(b->next)
{
if(b->next->val==a->val)
{
b->next=b->next->next;
}
else
{
b=b->next;
}
}
a=a->next;
}
return head;
}

运行结果

LeetCode刷题(166)~移除重复节点_编写代码_02

题目来源

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/remove-duplicate-node-lcci