每日刷题-leetcode-82. 删除排序链表中的重复元素 II

leetcode-82. 删除排序链表中的重复元素 II

    • 题目要求
    • 思路:
    • 过程
    • 代码实现

题目要求

存在一个按升序排列的链表,给你这个链表的头节点 head ,请你删除链表中所有存在数字重复情况的节点,只保留原始链表中 没有重复出现 的数字。

返回同样按升序排列的结果链表。


示例 1:


输入:head = [1,2,3,3,4,4,5]
输出:[1,2,5]
示例 2:


输入:head = [1,1,1,2,3]
输出:[2,3]

思路:

1:遍历链表,统计重复元素的个数,删除,
2:假设案例1:【1,2,3,3,4,4,5】,
遍历1,不重复,
遍历2,不重复,
遍历3,重复,统计3出现的次数,如果重复,则删除3
遍历4,重复,统计4出现的次数,如果重复,则删除4
遍历5,不重复
也就剩【1,2,5】

过程

每日刷题-leetcode-82. 删除排序链表中的重复元素 II_第1张图片
每日刷题-leetcode-82. 删除排序链表中的重复元素 II_第2张图片

代码实现

public static ListNode deleteDuplicates3(ListNode head) {
        if(head == null){
            return null;
        }
        ListNode dumy = new ListNode(-1);
        dumy.next = head;
        ListNode pre = dumy;
        ListNode cur = dumy.next;

        while (cur != null){
            int count = 0;
            ListNode differNode = cur;
            while (differNode.next != null && differNode.val == differNode.next.val){
                count++;
                differNode = differNode.next;
            }
            if(count > 0){
                pre.next = differNode.next;
            }else {
                pre = cur;
            }
            cur = differNode.next;
        }

        return dumy.next;
    }

你可能感兴趣的:(数据结构和算法)