题目描述
在一个排序的链表中,存在重复的结点,请删除该链表中重复的结点,重复的结点不保留,返回链表头指针。 例如,链表1->2->3->3->4->4->5 处理后为 1->2->5
1,申请一个新的链表保存删除重复结点后的链表
2,注意是将所有重复的结点全部删除
3,定义一个p指针指向原链表,一个指针newp指向新链表,并且将newp->next指向原链表的头结点
4,每次遇到当前结点值与后边结点值相同时,p结点要往后移动到新的不相同值的结点
class Solution {
public:
ListNode* deleteDuplication(ListNode* pHead)
{
if (pHead==NULL or pHead->next==NULL)
return pHead;
ListNode* newHead = new ListNode(0);
newHead->next = pHead;
ListNode* newp = newHead;
ListNode* p = pHead;
while (p!=NULL and p->next!=NULL)
{
if (p->val == p->next->val)
{
int val = p->val;
while (p!=NULL && val == p->val)
{
p = p->next;
}
newp->next = p;
}
else
{
newp = p;
p = p->next;
}
}
return newHead->next;
}
};