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


本题是leetcode,地址:83. 删除排序链表中的重复元素

题目

给定一个排序链表,删除所有重复的元素,使得每个元素只出现一次。

示例 1:

输入: 1->1->2
输出: 1->2
示例 2:

输入: 1->1->2->3->3
输出: 1->2->3

分析

此题跟leetcode-26-删除排序数组中的重复项解法很类似,只不过这次是链表;回顾一下上一个题的解法

快慢指针的妙用,利用两个指针i, j,初始化值为0和1,当两个指针对应的值相等时,指针j+1,继续执行循环;而当两个指针对应的值不相等时,将指针i+1,并将指针j对用的值赋值给指针i,然后指针j+1,继续向下执行循环,直到循环结束。

细节需要注意:最后慢指针是最后一个数据的索引,题目要求是返回数组的长度,所以需要 +1返回;

 ListNode left = head;       // 慢指针
 ListNode right = head.next; // 快指针
 同样的,判断两个值是否相等,即可,代码很简单

code

    public ListNode deleteDuplicates(ListNode head) {
        if(head == null || head.next == null){
            return head;
        }
        ListNode left = head;
        ListNode right = head.next;
        while (right != null) {
            int v = right.val;
            if(v == left.val) {
                left.next = right.next;
            } else {
                left = left.next;
            }
            right = right.next;
        }
        return head;
    }

你的鼓励也是我创作的动力

打赏地址

posted @ 2020-07-25 00:23  Yangsc_o  阅读(108)  评论(0编辑  收藏  举报