82. 删除排序链表中的重复元素 II

82. 删除排序链表中的重复元素 II

2021年3月25日

​ 数据量300,数据大小[-200,200]

​ 题意很简单,就考验你指针的使用。

​ 两种方法

桶排序暴力法

思路很简单,加个100的偏移量,然后全都存下来,再倒着存进链表里返回即可。

class Solution { public: ListNode* deleteDuplicates(ListNode* head) { vector<int>v(201); while(head){ v[head->val+100]++; ListNode* tmp=head; head=head->next; delete(tmp); } for(int i=200;i>=0;i--) if(v[i]==1){ ListNode* tmp=new ListNode(i-100,head); head=tmp; } return head; } };

双(三)指针法

嗯,也没什么难理解的。

新建一个头指针指向head,然后从头到尾遍历。

对于[3,3,3]

我们在while里处理成[3]

再令pre->next=p(3)->next,再给它叉掉就完事了

class Solution { public: ListNode* deleteDuplicates(ListNode* head) { ListNode *pre=new ListNode(0,head); ListNode *dump=pre; ListNode *p=head; while(p&&p->next){ if(p->val==p->next->val){ while(p->next&&p->val==p->next->val){ ListNode *tmp=p->next; p->next=tmp->next; delete(tmp); } pre->next=p->next; delete(p); } else pre=p; p=pre->next; } head=dump->next; delete(dump); return head; } };

__EOF__

本文作者CrossAutomaton
本文链接https://www.cnblogs.com/CrossAutomaton/p/17867539.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角推荐一下。您的鼓励是博主的最大动力!
posted @   CrossAutomaton  阅读(3)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?
点击右上角即可分享
微信分享提示