题目链接:Remove Duplicates from Sorted List

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.

这道题的要求是在有序链表中删除有重复数字的节点,使其只出现1次。

思路就是找到重复元素,删除即可。循环检测,如果两个连续节点的数字一样,删除一个重复的元素。

时间复杂度:O(n)

空间复杂度:O(1)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
class Solution
{
public:
    ListNode *deleteDuplicates(ListNode *head)
    {
        ListNode *h = new ListNode(0);
        h -> next = head;
        
        for(ListNode *p = h; p -> next != NULL; p = p -> next)
            while(p -> next -> next != NULL && 
                  p -> next -> val == p -> next -> next -> val)
                p -> next = p -> next -> next;
        
        return h -> next;
    }
};