Exclua elementos duplicados na lista vinculada Ⅱ

1. Exigir

  • Dada uma lista vinculada classificada, exclua todos os nós com números repetidos e mantenha apenas os números que não aparecem repetidamente na  lista vinculada original  .

Exemplo 1:

Entrada: 1-> 2-> 3-> 3-> 4-> 4-> 5
 Saída: 1-> 2-> 5

Exemplo 2:

Entrada: 1-> 1-> 1-> 2-> 3
 Saída: 2-> 3

Dois, método recursivo

2.1 Análise de pensamento

  1. Existem duas tarefas a serem concluídas pelo método recursivo: ①Para elementos repetidos, deve ser pulado diretamente; ②Para elementos não repetitivos, estabelecer conexões;
  2. É importante notar que por que esse problema pode ser resolvido por recursão? Primeiro, olhe para a função deste método é retornar uma lista vinculada ascendente sem elementos duplicados, ou seja, podemos localizar o primeiro elemento não duplicado na lista vinculada original, e seu próximo pode ser implementado por este método, e assim por diante, o problema original pode ser resolvido Decompor em vários subproblemas;

2.2 Implementação do código

class Solution {
    public ListNode deleteDuplicates(ListNode head) {
        if(head == null || head.next == null) {
            return head;
        }
        ListNode nextNode = head.next;
        if(nextNode.val == head.val) {
            //定位到链表的不重复节点
            while(nextNode != null && nextNode.val == head.val) {
                nextNode = nextNode.next;
            }
            //舍弃重复节点部分
            head = deleteDuplicates(nextNode);  
        } else {
            //连接无重复的节点
            head.next = deleteDuplicates(head.next);
        }
        return head;
    }
}

2.3 Análise de complexidade

  • A complexidade do tempo é O (N), e todos os nós da lista vinculada precisam ser percorridos;
  • A complexidade do espaço é O (N), e a profundidade de recursão pode chegar até N;

Acho que você gosta

Origin blog.csdn.net/Sruggle/article/details/113834557
Recomendado
Clasificación