LeetCode题解:Remove Duplicates from Sorted List

来源:互联网 发布:nginx 设置默认页面 编辑:程序博客网 时间:2024/06/01 10:43

Remove Duplicates from Sorted List

Given a sorted linked list, delete all duplicates such that each element appear onlyonce.

For example,
Given 1->1->2, return 1->2.
Given 1->1->2->3->3, return 1->2->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) {        // empty list        if (head == nullptr)            return nullptr;                int current_value;        ListNode* fwd_iter = head->next;        ListNode* iter = head;        current_value = head->val;        while(fwd_iter != nullptr)        {            if (current_value != fwd_iter->val)            {                if (fwd_iter != iter->next)                {                    ListNode* recycle = iter->next;                    while(recycle != fwd_iter)                    {                        ListNode* tmp = recycle;                        recycle = recycle->next;                        delete tmp;                    };                }                iter->next = fwd_iter;                iter = fwd_iter;                current_value = iter->val;            }            fwd_iter = fwd_iter->next;        }                if (iter->next != nullptr)        {            ListNode* recycle = iter->next;            while(recycle != nullptr)            {                ListNode* tmp = recycle;                recycle = recycle->next;                delete tmp;            }            iter->next = nullptr;        }                return head;    }};


原创粉丝点击