删除排序链表中的重复数字 II

来源:互联网 发布:mac玩魔兽世界怎么样 编辑:程序博客网 时间:2024/06/05 00:53

给定一个排序链表,删除所有重复的元素只留下原链表中没有重复的元素。

样例

给出1->2->3->3->4->4->5->null,返回1->2->5->null

给出1->1->1->2->3->null,返回 2->3->null

/** * Definition of ListNode * class ListNode { * public: *     int val; *     ListNode *next; *     ListNode(int val) { *         this->val = val; *         this->next = NULL; *     } * } */class Solution{public:    /**     * @param head: The first node of linked list.     * @return: head node     */    ListNode * deleteDuplicates(ListNode *head) {        // write your code here        if (head == NULL)    {    return NULL;    }    ListNode *p = head;    bool dupFound = false;    if (p->next != NULL && p->next->val == p->val)    {       while (p->next != NULL && p->next->val == p->val)    {    ListNode *temp = p->next->next;    delete p->next;    p->next = temp;    }    ListNode *next = p->next;    delete p;    return deleteDuplicates(next);    }    ListNode *result = head;    ListNode *q = head;    p = q->next;    while (p != NULL)    {    if (p->next != NULL)    {    if (p->next->val == p->val)    {    dupFound = true;    ListNode *temp = p->next->next;    delete p->next;    p->next = temp;    }    else    {    if (dupFound)    {    ListNode *temp = p->next;    delete p;    q->next = temp;    p = q->next;    dupFound = false;    }    else    {    q = p;    p = p->next;    }    }    }    else    {    if (dupFound)    {    q->next = NULL;    delete p;    dupFound = false;    }    p = NULL;    }    }    return result;    }};


0 0
原创粉丝点击