Concatenar Lista em C

1. Concatenar Lista em C

Matheus Custodio de Souza
Ramboqui

(usa Outra)

Enviado em 15/04/2018 - 18:20h

Boa noite!
Alguém pode me ajudar com minha dúvida?
Tenho que concatenar duas lista, ou seja ligar a lista 2 no final da lista 1.
Tentei de várias formas que achei na internet, tentei adaptar, mas todas travavam a execução, exceto essa última.
O problema dela é que esta concatenando no segundo nó em vez do último.
*Já tentei colocar while(aux1->prox != NULL) {aux1 = aux1->prox}
**atentem-se as funções concatenar e main



/* lista.h */
#ifndef LISTA_H
#define LIST_H

typedef struct sCelula{
int dado;
struct sCelula *prox;
} Celula;

typedef struct sLista{
Celula* inicio;
} Lista;
#endif



/* lista.c */
#include <stdio.h>
#include <locale.h>
#include <stdlib.h>
#include <malloc.h>
#include <math.h>
#include "lista.h"

void iniciarLista( Lista * lista){
lista->inicio = NULL;
}

void imprimirLista(Lista*lista){
Celula * p;
p = lista->inicio;
printf("Lista: ");
while( p != NULL){
printf("%d ",p->dado);
p = p->prox;
}
printf("\n");
}

void inserirInicio(Lista * lista, int dado){
Celula * p;
p = (Celula *) malloc( sizeof(Celula));
p->dado = dado;
p->prox = lista->inicio;
lista->inicio = p;
}

void excluirInicio(Lista*lista){
Celula * p;
p = lista->inicio;
lista->inicio=p->prox;
free(p);
}

Celula* busca(Lista*lista,int dado){
Celula* p;
for(p = lista->inicio; p != NULL; p=p->prox){
if(p->dado == dado)
return p;
}
return NULL;
}

void inverter(Lista * lista){
Celula *p, *q, *r;
if( lista->inicio != NULL){
p = lista->inicio;
q = p->prox;
p->prox = NULL;
if (q != NULL){
r = q->prox;
}
while(q != NULL){
q->prox = p;
p = q;
q = r;
if( r != NULL){
r = r->prox;
}
}
lista->inicio=p;
}
}

void excluirProximo(Lista*lista, Celula *p){
Celula * q;
if(p->prox != NULL){
q = p->prox;
p->prox = p->prox->prox;
free(q);
}
}

void concatenar(Lista** lista1, Lista** lista2) {
Celula* aux1;
Celula* aux2;
if(lista1 == NULL) {
*lista1 = *lista2;
} else {
aux1 = *lista1;
aux2 = *lista2;
imprimirLista(&aux1);
aux1->prox = aux2;
imprimirLista(&aux1);
}
}

main() {
setlocale(LC_ALL, "");

Lista* lista1;
Lista* lista2;

iniciarLista(&lista1);
iniciarLista(&lista2);

inserirInicio(&lista1, 3);
inserirInicio(&lista1, 2);
inserirInicio(&lista1, 1);

inserirInicio(&lista2, 5);
inserirInicio(&lista2, 4);

imprimirLista(&lista1);
imprimirLista(&lista2);
printf("-----------------\n");

concatenar(&lista1, &lista2);
//imprimirLista(&lista1);
}




  






Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts