您的位置:首页 > 其它

删除链表中重复的节点

2017-08-14 20:25 239 查看
在一个排序的链表中,存在重复的结点,请删除该链表中重复的结点,重复的结点不保留,返回链表头指针。 例如,链表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 * p=new ListNode(-1);

        p->next=pHead;

        ListNode *p1=p;

        ListNode *p2=p->next;

        while(p2)

            {

            //找到不相等的位置

            while(p2->next!=NULL&&p2->val==p2->next->val)

                p2=p2->next;

            //如果位置不在下一个,则连接。

            if(p1->next!=p2)

            {

                p2=p2->next;

                p1->next=p2;

            }

            //头结点是空的

            else

                {

                p1=p2;

                p2=p2->next;

            }

        }

        return p->next;

       

        

        

    }

};
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: