`
carlosten
  • 浏览: 3433 次
  • 性别: Icon_minigender_1
  • 来自: 北京
最近访客 更多访客>>
社区版块
存档分类
最新评论

Leetcode: Remove Duplicates from Sorted List II

 
阅读更多

题目描述:

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.

 

对链表还不是太熟悉,步骤如下:

1、得到链表头:先找到第一个不重复的数,作为链表头

2、然后一个一个找不重复的数,加入到链表中

 

找不重复数的方法是,用一个int值记录当前的值,比较它与next的数值,如果等则记数加一,如果不等则查看记数,记数为0则说明没有重复数,加入链表,不为零则不加入。同时更新int值,记数值为0。

 

最后要处理边界条件,如果记数为0,则表示最后读入的数位单个的,应该加入链表。

 

class Solution {
public:
    ListNode *deleteDuplicates(ListNode *head) {
        if(head == NULL)
        {
            return head;
        }
        ListNode *p = head;
        int find = 0;
        int temp = p->val;
        int count = 0;
        while(p -> next != NULL)
        {
            if(temp != p->next->val)
            {
                if(count == 0)
                {
                    find = 1;
                    p = p->next;
                    break;
                }
                else
                {
                    count = 0;
                    temp = p->next->val;
                    p = p->next;
                }
            }
            else
            {
                p = p->next;
                count ++;
            }
        }
        if(find)
        {
            ListNode *result = new ListNode(temp);
            ListNode *q = result;
            temp = p->val;
            count = 0;
            while(p->next != NULL)
            {
                if(temp != p->next->val)
                {
                    if(count == 0)
                    {
                        q->next = p;
                        p = p->next;
                        q = q->next;
                        temp = p->val;
                    }
                    else
                    {
                        count = 0;
                        temp = p->next->val;
                        p = p->next;
                    }
                }
                else
                {
                    p = p->next;
                    count ++;
                }
            }
            if(count == 0)
            {
                q->next = p;
                q = q->next;
            }
            q->next = NULL;
            return result;
        }
        else if( p->next == NULL && count == 0 )
        {
            ListNode *result = new ListNode(temp);
            result->next = NULL;
            return result;
        }
        else
        {
            return NULL;
        }
    }
};

 

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics