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.