As duas listas vinculadas são revertidas, ou seja, o ponteiro da cauda da outra tabela de corrente vinculada é revertida da fusão do ponteiro da cauda de uma lista vinculada para a outra lista vinculada. Abaixo, a idéia e o código de implementação da alternância de reversão das duas listas vinculadas são introduzidas em detalhes.
1. Descrição do problema
Links a e b
A: 1-> 2-> 3-> 4
B: a-> b-> c-> d
Por favor, reverta a lista dos dois vinculados alternadamente.
4-> d-> 3-> c-> 2-> b-> 1-> A
A definição do tipo de nó é a seguinte:
ClassNode {Public Node Next; 2. Código -fonte:
Duas listas vinculadas A e B são transmitidas de volta à lista vinculada após o processamento:
Node reverse_merge (nó a, nó b) {// a, b Todos têm um nó se (a.Next == NULL) {A.Next = B; .next; A.Next = B; Três, análise:
O programa é dividido em três partes -antes do ciclo enquanto o ciclo e o ciclo do tempo.
1) Processando a lista vinculada anterior A e B
2) Enquanto o ciclo -a parte do processamento do núcleo do processo de processamento pode ser repetida aqui.
No entanto, o nó em que A está localizado em A. especialmente processado para o nó onde a está localizado, é necessária uma operação seguinte = nulo, o que significa que o primeiro átomo em 1 deve ser implementado fora do ciclo.
Se você usar o método 2, só precisará colocar 1 dedo em um ciclo. Portanto, a estrutura atômica descrita em 2 é usada aqui.
Informações exigidas pela estrutura atômica
Quando vamos a um certo ciclo, assumindo que a operação do Círculo Azul, neste momento, o estado de nossa lista vinculado é:
O método de desenho mais intuitivo é:
Envolve 3 nós -2,3 e C. A parte vermelha é o método de link que queremos fazer. Para vincular C-> 2,3-> C, devemos saber que existem ponteiros correspondentes para registrar sua posição. Portanto, antes do ciclo, precisamos dominar o endereço desses três elementos e, após o processamento, da mesma maneira, a estrutura atômica que precisa ser processada da mesma maneira.
Por exemplo, o método a seguir registra o endereço dos três nós projetados neste ciclo:
A, Na e B representam o ponteiro ou referência aos nós correspondentes.
Após a conclusão do processamento, você precisa gravar os nós envolvidos na próxima estrutura atômica da mesma maneira, para garantir que o ciclo possa ser executado de acordo com a lógica unificada.
Essas operações de atribuição são exatamente o que o código médio do corpo faz. Além disso, o NextB é definido como uma variável intermediária no código para registrar o endereço do nó D anterior antes da desconexão C-> D, porque o C a 2 perderá o contato D. Essa variável intermediária é necessária.
3) Antes de todo o loop -resolver o problema trazido pela operação preparatória
Não lidamos com um nó A, porque é muito especial e não há uma estrutura atômica adequada que possa incluí -lo. Então, colocamos fora do ciclo e nos preparamos para a circulação.
Depois disso, podemos colocar 1, 2 e B no ciclo. Aqui, existem apenas um nó A e B, que também precisa ser processado separadamente.
4) Após todo o loop -o processamento final
Quando descobrimos que a lista vinculada B chega ao fim, o ciclo acabou. Mas neste momento, há um nó de manuseio. Nosso ciclo parará nesta estrutura atômica:
Como operação final, precisamos processar manualmente as etapas de link de D-> 3,4-> D-Isso também não é de maneira a, porque o tratamento da estrutura atômica deve ser encontrada.
Esta não é uma maneira completa, e há muitas coisas que não foram processadas. Além disso, a estrutura de dados do nó não está completamente definida, mas esse não é o foco deste artigo.
Através da análise detalhada acima, espero ajudar todos a entender os métodos e a implementação das duas fusões alternativas da lista vinculada.