首页 > 代码库 > [leetcode] 13. Remove Duplicates from Sorted List

[leetcode] 13. Remove Duplicates from Sorted List

这个题目其实不难的,主要是我C++的水平太差了,链表那里绊了好久,但是又不像用python,所以还是强行上了。

题目如下:

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

For example,

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

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

思路很简单,拿到链表后依次遍历,遇到next->val == val;就把next的节点删掉就行。然后就看C++的操作了。

题解如下:

/** * 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)     {        ListNode *aspros = head;        ListNode *deferos = NULL;        if (aspros != NULL)        {            while (aspros->next)            {                int nextVal = aspros->next->val;                while (aspros->val != nextVal && aspros->next->next)                {                    deferos = aspros;                    aspros = aspros->next;                    nextVal = aspros->next->val;                }                if (aspros->val == nextVal)                {                    if (deferos == NULL)                    {                        head = aspros->next;                    }                    else                    {                        deferos->next = aspros->next;                    }                }                else                {                    // 这里是正常链表删完所有重复节点后的出口                    return head;                }                aspros = aspros->next;            }            // 这里处理只给入一个值的链表的情况            return head;        }        else        {            // 这里处理给入空链表的情况            return head;        }    }};

[leetcode] 13. Remove Duplicates from Sorted List