在一个排序的链表中,存在重复的结点,请删除该链表中重复的结点,重复的结点不保留,返回链表头指针。
例如,链表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)
{
//只有一个节点或没有节点
if(pHead==NULL||pHead->next==NULL)
{
return pHead;
}
ListNode* head=pHead;
ListNode* cur=new ListNode(int());
ListNode* tmp=cur;
while(head)
{
//如果if条件满足,说明有重复的节点,循环向后进行查找,直至下面while条件不满足
if(head->next!=NULL&&head->val==head->next->val)
{
ListNode* Next=head->next;
while(Next->next!=NULL&&Next->val==Next->next->val)
{
Next=Next->next;
}
head=Next->next;
}
//如果没有找到,就一直往后找,直至所有节点全部遍历
else
{
tmp->next=head;
tmp=tmp->next;
head=head->next;
}
}
tmp->next=NULL;
return cur->next;
}
};