-1
I have a function that receives as parameter two chained lists containing elements and a third empty list that at the end will be the junction of the two, but at the end of the execution of the function it is returning me only the last element of the list of number 2, in the case of the first item which has been inserted in the second list. Follow the code below, the function I am having problem is the function name Concatena_lists.
# include <iostream>
using namespace std;
struct nolista {
int dado;
nolista* prox;
};
nolista *Cria_Lista(){
return NULL;
}
nolista * Insere_Numero_Na_Lista(nolista *Ponteiro_De_Inserir, int Valor_A_Ser_Inserido){
if(Ponteiro_De_Inserir == NULL){
Ponteiro_De_Inserir = (nolista *)malloc(sizeof(nolista));
Ponteiro_De_Inserir -> dado = Valor_A_Ser_Inserido;
Ponteiro_De_Inserir -> prox = NULL;
return Ponteiro_De_Inserir;
}else{
nolista *Ponteiro_Lista_Nao_Vazia;
Ponteiro_Lista_Nao_Vazia = (nolista *) malloc(sizeof(nolista));
Ponteiro_Lista_Nao_Vazia -> dado = Valor_A_Ser_Inserido;
Ponteiro_Lista_Nao_Vazia -> prox = Ponteiro_De_Inserir;
return Ponteiro_Lista_Nao_Vazia;
}
}
void Exibir_Lista(nolista *Ponteiro_De_Exibicao){
nolista *Ponteiro_Para_Impressao = Ponteiro_De_Exibicao;
printf("\n\nAbaixo estao os numeros da lista : \n");
while (Ponteiro_Para_Impressao != NULL)
{
printf("\n%d", Ponteiro_Para_Impressao -> dado);
Ponteiro_Para_Impressao = Ponteiro_Para_Impressao -> prox;
}
printf("\n");
}
nolista * Concatena_Listas(nolista *L1, nolista *L2, nolista *Lista_Concatenada){
nolista *Ponteiro_De_Insercao;
nolista *Ponteiro_Pecorre_L1 = L1;
nolista *Ponteiro_Pecorre_L2 = L2;
while (Ponteiro_Pecorre_L1 != NULL){
if(Lista_Concatenada == NULL){
Lista_Concatenada = (nolista *)malloc(sizeof(nolista));
Lista_Concatenada -> dado = Ponteiro_Pecorre_L1 -> dado;
Lista_Concatenada -> prox = NULL;
}else{
nolista *Ponteiro_Lista_Nao_Vazia;
Ponteiro_Lista_Nao_Vazia = (nolista *) malloc(sizeof(nolista));
Lista_Concatenada -> dado = Ponteiro_Pecorre_L1 -> dado;
Ponteiro_Lista_Nao_Vazia -> prox = Lista_Concatenada;
}
Ponteiro_Pecorre_L1 = Ponteiro_Pecorre_L1 ->prox;
}
while (Ponteiro_Pecorre_L2 != NULL){
if(Lista_Concatenada == NULL){
Lista_Concatenada = (nolista *)malloc(sizeof(nolista));
Lista_Concatenada -> dado = Ponteiro_Pecorre_L1 -> dado;
Lista_Concatenada -> prox = NULL;
}else{
nolista *Ponteiro_Lista_Nao_Vazia;
Ponteiro_Lista_Nao_Vazia = (nolista *) malloc(sizeof(nolista));
Lista_Concatenada -> dado = Ponteiro_Pecorre_L2 -> dado;
Ponteiro_Lista_Nao_Vazia -> prox = Lista_Concatenada;
}
Ponteiro_Pecorre_L2 = Ponteiro_Pecorre_L2 ->prox;
}
return Lista_Concatenada;
}
int main(int argc, char const *argv[]){
nolista * Lista_1, *Lista_2, *Lista_Concatenada;
Lista_1 = Cria_Lista();
Lista_2 = Cria_Lista();
Lista_Concatenada = Cria_Lista();
int Quantidade_De_Elementos_Da_Lista_L_1,Quantidade_De_Elementos_Da_Lista_L_2,
Numero;
printf("\nDigite a quantidade de elementos da lista 1 : ");
scanf("%d", &Quantidade_De_Elementos_Da_Lista_L_1);
for(int i = 0; i < Quantidade_De_Elementos_Da_Lista_L_1; i++){
printf("\nDigite o elemento da lista de numero [%d] : ", (i+ 1));
scanf("%d", &Numero);
Lista_1 = Insere_Numero_Na_Lista(Lista_1, Numero);
}
printf("\nDigite a quantidade de elementos da lista 2 : ");
scanf("%d", &Quantidade_De_Elementos_Da_Lista_L_2);
for(int i = 0; i < Quantidade_De_Elementos_Da_Lista_L_2; i++){
printf("\nDigite o elemento da lista de numero [%d] : ", (i+ 1));
scanf("%d", &Numero);
Lista_2 = Insere_Numero_Na_Lista(Lista_2, Numero);
}
Exibir_Lista(Lista_1);
Exibir_Lista(Lista_2);
Lista_Concatenada = Concatena_Listas(Lista_1, Lista_2, Lista_Concatenada);
Exibir_Lista(Lista_Concatenada);
return 0;
}
Is this a C program? It just included
iostream
... I suggest rewritingConcatena_Listas()
: to insert into the list use the code you have already written. In the internal loop test every time ifLista_Concatenada()
isNULL
. You do not need parameter 3. Note that a list is not a node. A node is not a list, and should have no reference to the data in the list functions or will not be useful after– arfneto
And why you need pointers to the two original lists if you only access one at a time?
– arfneto