CS-Notes全部笔记在阅读器中打开

18.2 删除链表中重复的结点

Leetcode

题目描述

在一个排序的链表中,重复出现的结点全部删除,一个都不保留。例如 1 -> 2 -> 3 -> 3 -> 4 -> 4 -> 5 处理后为 1 -> 2 -> 5。

题目描述的配图

解题思路

用递归处理,deleteDuplicates(head) 返回以 head 开头的链表去重后的头节点:

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

在阅读器中可以用目录和搜索、切换深色模式、练习这篇笔记中的面试题:打开《18.2 删除链表中重复的结点》