82. Remove Duplicates from Sorted List II

来源:互联网 发布:淘宝网平板电脑版下载 编辑:程序博客网 时间:2024/06/05 04:56

Description:

Given a sorted linked list, delete all nodes that have duplicate numbers, leaving only distinct numbers from the original list.

For example,

Given 1->2->3->3->4->4->5, return 1->2->5.

Given 1->1->1->2->3, return 2->3.


解析:使用两个指针head和pass,head不断遍历题目中的链表,遇到不重复的节点便链接到pass后,最后返回pass的头指针即可。这道题我们可以使用迭代和递归两种方法。


迭代版本:

class Solution {public://迭代版    ListNode* deleteDuplicates(ListNode* head) {        if(!head || !head->next)    return head;                ListNode* pass, new_head(0);        new_head.next = head;        pass = &new_head;        while(head && head->next)        {                        if(head->val != head->next->val)            {                pass->next = head;                pass = pass->next;            }            else            {                while(head->next && head->val == head->next->val)                    head = head->next;            }                        head = head->next;        }                if(head)        {            pass->next = head;            pass = pass->next;        }        pass->next = NULL;        return new_head.next;    }};
递归版本:

class Solution{public://递归版    ListNode* deleteDuplicates(ListNode* head) {        if(!head || !head->next)    return head;                if(head->val != head->next->val)        {            head->next = deleteDuplicates(head->next);            return head;        }                while(head->next && head->val == head->next->val)            head = head->next;                return deleteDuplicates(head->next);    }    };