remove duplicates from sorted list II

来源:互联网 发布:cf总是网络异常 编辑:程序博客网 时间:2024/06/14 17:48

题目:
Given a sorted linked list, delete all nodes that have duplicate numbers, leaving only distinct numbers from the original list.
For example,
Given1->2->3->3->4->4->5, return1->2->5.
Given1->1->1->2->3, return2->3.

/** * Definition for singly-linked list. * struct ListNode { *     int val; *     ListNode *next; *     ListNode(int x) : val(x), next(NULL) {} * }; */class Solution{  public:    ListNode* deleteDuplicates(ListNode* head)    {        if (head == NULL)            return NULL;        ListNode dummy(-1);        dummy.next = head;        ListNode* prev = &dummy, *cur = head;        while (cur)        {            bool duplicated = false;            while (cur->next != NULL && cur->val == cur->next->val)            {                duplicated = true;                ListNode* tmp = cur;                cur = cur->next;                delete tmp;            }            if (duplicated) //delete last duplicate node            {                ListNode* tmp = cur;                cur = cur->next;                delete tmp;                continue;            }            prev->next = cur;            prev = prev->next;            cur = cur->next;        }        prev->next = cur;        return dummy.next;    }};

递归:(看的答案)

class Solution{  public:      ListNode* deleteDuplicates(ListNode* head)      {          if (head == NULL || head->next == NULL)              return NULL;          ListNode* p = head->next;          if (head->val == p->val)           {               while(p && head->val == p->val)                {                        ListNode* tmp = p;                        p = p->next;                       delete tmp;                   }                   delete head;                   return deleteDuplicates(p);           }           else           {              head->next = deleteDuplicates(head->next);              return head;           }          }        };
0 0
原创粉丝点击