83. 删除排序链表中的重复元素

描述

给定一个排序链表,删除所有重复的元素,使得每个元素只出现一次。
示例 1:
输入: 1->1->2
输出: 1->2
示例 2:
输入: 1->1->2->3->3
输出: 1->2->3

思路

题目比较简单。
1.首先检查是不是空链表,是则直接返回head,不是则继续执行。
2.先定义一个ListNode类型的指针,指向当前操作的结点。
3.如果当前链表有下一节点则执行while,在while中判断当前结点的val值和下一结点的val值是否相同,相同则更改当前结点的指向为下下结点,不相同则指针递增。
4.遍历了一遍链表,所以时间复杂度O(n),仅开辟了一个结点空间,空间复杂度O(1)。

解答

class Solution {
public:
    ListNode* deleteDuplicates(ListNode* head) {
        if(!head) return head;
        ListNode* point = head;
        while(point->next){
            if(point->next->val == point->val)
                point->next = point->next->next;  
            else point = point->next;//注意不能用point ++,因为链表在内存中地址不连续
        }
        return head;
    }
};
©️2020 CSDN 皮肤主题: 1024 设计师:上身试试 返回首页