排序鏈表去重
2020.7.5
/*
struct ListNode {
int val;
struct ListNode *next;
ListNode(int x) :
val(x), next(NULL) {
}
};
*/
class Solution {
public:
ListNode* deleteDuplication(ListNode* pHead)
{
ListNode * p = pHead;
ListNode * t, *q;
if(!p||(p&&!p->next)) return pHead;
t = p->next;
while(t) {
if(t->val!=p->val) p = p->next,t=t->next;
else {
p->next = t->next;
delete t;
t = p->next;
}
}
return pHead;
}
//1->2->3->3->4->4->5
//變成
//1->2->3->4->5
};
刪除重複的結點
遞歸實現,每次刪除開頭重複的所有結點
1->2->3->3->4->4->5 處理後爲 1->2->5
/*
struct ListNode {
int val;
struct ListNode *next;
ListNode(int x) :
val(x), next(NULL) {
}
};
*/
class Solution {
public:
ListNode* deleteDuplication(ListNode* pHead)
{
ListNode * p = pHead;
ListNode * t, *q;
if(!p||(p&&!p->next)) return pHead; //空表或者只有一個元素
t = p->next;
if(p->val!=t->val) {
p->next = deleteDuplication(t);
return pHead;
}
int val = p->val;
while(p) {
if(p->val==val) {
pHead = p->next;
delete p;
p = pHead;
}
else {
pHead = deleteDuplication(pHead);
return pHead;
}
}
return nullptr;
}
};