LeetCode82. 删除排序链表中的重复元素 II(未完)
程序员文章站
2022-05-10 19:52:14
...
给定一个排序链表,删除所有含有重复数字的节点,只保留原始链表中 没有重复出现 的数字。
示例 1:
输入: 1->2->3->3->4->4->5 输出: 1->2->5
示例 2:
输入: 1->1->1->2->3 输出: 2->3————————————————————————————————————————————————
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* ListNode *next;
* ListNode(int x) : val(x), next(NULL) {}
* };
*/
class Solution {
public:
ListNode* deleteDuplicates(ListNode* head) {
while((head==NULL)||(head->next==NULL)||(head->next->next==NULL)||(head->next->next->next==NULL)||(head->next->next->next->next==NULL))
{
return head;
}
ListNode *prior=head,*p=head->next,*q=head->next->next;
while(q!=NULL)
{
if(p->val!=q->val)
{
prior=prior->next;
}
else
{
while((p->val==q->val)&&(q!=NULL))
{
p->next=q->next;
q=q->next;
//prior->next=q->next;
//p=q->next;
//q=p->next;
}
prior->next=q;
}
p=p->next;
q=q->next;
}
if(head->val==head->next->val)
{
head=prior->next;
}
else
{
head->next=prior;
}
return head;
}
};
很惨了,昨天早上很快的完成了一个删除1,然后跃跃欲试删除2。结果,被删除2吊打。
首先,难点在于prior节点很难放置,而且很难比较,于是我决定最后倒回来处理头部;
其次,安放好prior后,只考虑了两连续的情况,奇连续的情况没有考虑,比如上例就无法处理奇连续,尤其是前面元素的奇连续;
再次,人不能狂,人一狂,连CSDN都在维护了,吐槽都受到阻碍;
好了,我们期待新代码的诞生。
新代码诞生了,然而可是却,并不是我想的结果,目前还没有想到solution,沮丧。。。
大致思路是这样,有一个三元素窗口,不断滑动,将窗口中间的元素通过比较放入新的链表,头尾特殊情况单独处理。
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* ListNode *next;
* ListNode(int x) : val(x), next(NULL) {}
* };
*/
class Solution {
public:
ListNode* deleteDuplicates(ListNode* head) {
while((head==NULL)||(head->next==NULL))
{
return head;
}
ListNode *prior=head,*p=head,*q=head->next;
ListNode *list=new ListNode(NULL);
ListNode *headnode=list;
//处理第一个节点,安置prior
if((p->val)!=(q->val))
{
headnode->next=p;
headnode=headnode->next;
}
p=p->next;
q=q->next;
while(q!=NULL)
{
if(((p->val)!=(q->val))&&((p->val)!=(prior->val)))
{
headnode->next=p;
headnode=headnode->next;
}
prior=prior->next;
p=p->next;
q=q->next;
}
//处理最后一个节点
if((p->val)!=(prior->val))
{
headnode->next=p;
headnode=headnode->next;
}
return list->next;
}
};
劳烦各位帮忙找找是何?为何?缘何?推荐阅读
-
数据结构与算法 力扣83.删除排序链表的重复元素
-
82:删除排序链表中的重复元素II
-
LeetCode 解题报告-82. 删除排序链表中的重复元素 II
-
双指针法-删除数组中的重复元素以及奇偶排序
-
83.删除排序链表中的重复元素(通过)Python
-
LeetCode题解 83. 删除排序链表中的重复元素
-
LeetCode 删除排序链表中的重复元素
-
剑指offer56:删除链表中重复的结点,排序的链表中,删除重复的结点不保留,返回链表头指针。 例如,链表1->2->3->3->4->4->5 处理后为 1->2->5
-
【leetcode 简单】第十八题 删除排序链表中的重复元素
-
LintCode Python 101. 删除排序数组中的重复数字 II