这题其实很简单,因为是sorted,那么重复元素一定是连续的。我写的比较ugly,网上的solution更简洁。
#include <iostream>
using namespace std;
struct ListNode {
int val;
ListNode *next;
ListNode(int x) : val(x), next(NULL) {}
};
#if 0
ListNode* deleteDuplicates(ListNode* head) {
if (!head) return NULL;
ListNode* node = head;
while(node && node->next) {
if (node->val==node->next->val) {
while (node && node->next && (node->val==node->next->val)) {
if (node->next->next) node->next=node->next->next;
else node->next=NULL;
};
}else
node=node->next;
}
return head;
}
#endif // 0
ListNode* deleteDuplicates(ListNode* head) {
ListNode* node=head;
while(node && node->next) {
if (node->val==node->next->val)
node->next=node->next->next;
else
node=node->next;
}
return head;
}
int main()
{
ListNode a(1), b(1), c(2);
a.next=&b;
b.next=&c;
c.next=NULL;
ListNode *d=deleteDuplicates(&a);
while(d) {
cout<<d->val<<" ";
d=d->next;
}
cout<<endl;
cout<<"~~~~~"<<endl;
ListNode aa(1), bb(1), cc(2), dd(3), ee(3);
aa.next=&bb;
bb.next=&cc;
cc.next=ⅆ
dd.next=ⅇ
ListNode *ff=deleteDuplicates(&aa);
while(ff) {
cout<<ff->val<<" ";
ff=ff->next;
}
cout<<endl;
cout<<"~~~~~"<<endl;
ListNode aaa(1), bbb(1), ccc(1);
aaa.next=&bbb;
bbb.next=&ccc;
c.next=NULL;
ListNode *ddd=deleteDuplicates(&aaa);
while(ddd) {
cout<<ddd->val<<" ";
ddd=ddd->next;
}
cout<<endl;
return 0;
}
删除排序链表中重复元素
本文介绍了一种从已排序链表中移除所有重复元素的方法,通过遍历链表并利用节点值的有序性简化操作。文章提供了C++实现代码,并通过实例展示了算法效果。
486

被折叠的 条评论
为什么被折叠?



