原创

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

温馨提示:
本文最后更新于 2022年12月08日,已超过 932 天没有更新。若文章内的图片失效(无法正常加载),请留言反馈或直接联系我

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

递归解法:

时间复杂度:O(n)
空间复杂度:O(n)

    class Solution {
        public ListNode deleteDuplicates(ListNode head) {
            // - 递归解法
            // - head 为空或者 head.next 为空边界判断
            if (null == head || null == head.next) {
                return head;
            }
            // - 初始化下一个接待您
            ListNode next = head.next;

            // - 情况1 :head 开始就重复了,找到了与head相连的所有重复元素,
            if (head.val == next.val) {
                // - 进一步判断还有没有重复元素
                while (null != next && head.val == next.val) {
                    // - 如果有则删除节点向后移动
                    next = next.next;
                }
                // - 直到找到重复元素后面的第一个元素,继续递归判断重复元素后面的第一个元素
                return deleteDuplicates(next);
            } else {
                // - 当前head 不重复,继续递归找下一个,判断后面的节点是否重复,最后不重复的节点都和head接上了
                // - 如果后面有出现和非head 的重复节点都删掉,让只出现一次的节点接到head后面即可
                head.next  = deleteDuplicates(head.next);
            }
            return head;
        }
    }
正文到此结束