Espada refere-se à oferta - 52. O primeiro nó comum de duas listas vinculadas - Análise e código (Java)

Espada refere-se à oferta-52. O primeiro nó comum de duas listas vinculadas-análise e código [Java]

1. Título

Insira duas listas vinculadas e encontre seu primeiro nó comum. (Observe que, como os dados de entrada são uma lista vinculada, o prompt dos dados de teste incorretos é exibido de outras maneiras para garantir que os dados de entrada estejam corretos)

Dois, análise e código

1. Sincronizar localização

(1) Pensando

Após o nó comum, os nós subsequentes das duas listas vinculadas são exatamente os mesmos, portanto, as posições correspondentes das duas listas vinculadas de trás para a frente podem ser sincronizadas para obter o primeiro nó comum.
Ao percorrer as duas listas vinculadas separadamente, os respectivos comprimentos são obtidos. Depois de calcular a diferença de comprimento, a lista vinculada mais longa ignora o número de nós correspondentes e, em seguida, percorre ao mesmo tempo para comparar se os nós correspondentes são os mesmos.

(2) Código

public class Solution {
    
    
    public ListNode FindFirstCommonNode(ListNode pHead1, ListNode pHead2) {
    
    
         if (pHead1 == null || pHead2 == null)
             return null;
        int len1 = 0, len2 = 0;
        
        ListNode cHead1 = pHead1;
        ListNode cHead2 = pHead2;
        while (cHead1 != null) {
    
    
            cHead1 = cHead1.next;
            len1++;
        }
        while (cHead2 != null) {
    
    
            cHead2 = cHead2.next;
            len2++;
        }
        
        if (len1 >= len2) {
    
    
            cHead1 = pHead1;
            cHead2 = pHead2;
        }
        else {
    
    
            cHead1 = pHead2;
            cHead2 = pHead1;
        }
        for (int i = len1 - len2; i > 0; i--)
            cHead1 = cHead1.next;
        
        while (cHead1 != null && cHead2 != null && cHead1 != cHead2) {
    
    
            cHead1 = cHead1.next;
            cHead2 = cHead2.next;
        }
        return cHead1;
    }
}

(3. Resultados

Tempo de execução: 17 ms, uso de memória: 9660k.

Tres outro

Nada.

Acho que você gosta

Origin blog.csdn.net/zml66666/article/details/110410361
Recomendado
Clasificación