题目描述
在一个排序的链表中,存在重复的结点,请删除该链表中重复的结点,重复的结点不保留,返回链表头指针。例如,链表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 *pPreHead = new ListNode(0), *p = pHead, *pPre = pPreHead, *tp;
pPreHead->next = pHead;
while (p != nullptr && p->next != nullptr)
{
if (p->val == p->next->val)
{
int d = p->val;
while (p != nullptr && p->val == d)
{
tp = p;
pPre->next = p->next;
p = p->next;
delete tp;
}
}
else
{
pPre = p;
p = p->next;
}
}
p = pPreHead->next;
delete pPreHead;
return p;
}
};