删除链表中重复的结点

来源:互联网 发布:c语言随机函数怎么用 编辑:程序博客网 时间:2024/06/05 07:23

题目描述
在一个排序的链表中,存在重复的结点,请删除该链表中重复的结点,重复的结点不保留,返回链表头指针。 例如,链表1->2->3->3->4->4->5 处理后为 1->2->5

class Solution {public:    ListNode* deleteDuplication(ListNode* pHead)    {        ListNode* ans = new ListNode(-1);        ans->next=NULL;        ListNode *pre=ans,*back=pHead;        while(back){            if(back->next&&back->val==back->next->val){                int num=back->val;                while(back&&back->val==num){                    back=back->next;                }                pre->next=back;            }            else{                pre->next=back;                pre=pre->next;                back=back->next;            }        }        return ans->next;    }};

//递归class Solution {public:    ListNode* deleteDuplication(ListNode* pHead)    {        if (pHead==NULL)            return NULL;        if (pHead!=NULL && pHead->next==NULL)            return pHead;        ListNode* current;        if ( pHead->next->val==pHead->val){            current=pHead->next->next;            while (current != NULL && current->val==pHead->val)                current=current->next;            return deleteDuplication(current);                             }        else {            current=pHead->next;            pHead->next=deleteDuplication(current);            return pHead;        }        }};
0 0