Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdlib.h>
- #include <stdio.h>
- typedef struct nodo{
- int elem;
- struct nodo* ptrSig;
- }TNodo;
- typedef struct {
- TNodo *inicio;
- TNodo *fin;
- }TLista;
- void crearLista(TLista *);
- void listaUnitaria(TLista *,int);
- void anadeIzq(TLista *,int);
- void anadeDer(TLista *, int);
- void imprimirLista(TLista *);
- TLista suma(TLista *, TLista *);
- void arreglarLista(TLista *);
- TLista voltearLista(TLista *);
- int main(void){
- TLista lista1;
- TLista lista2;
- TLista listaFinal, listaFinal2;
- crearLista(&lista1);
- crearLista(&lista2);
- int digito;
- printf("Numero 1 : \n");
- /*for (;;){
- scanf("%d",&digito);
- if (digito == -1) break;
- anadeIzq(&lista1,digito);
- }*/
- printf("Numero 2 : \n");
- /*for(;;){
- scanf("%d",&digito);
- if (digito == -1) break;
- anadeIzq(&lista2,digito);
- }*/
- anadeIzq(&lista1,1);
- anadeIzq(&lista1,9);
- anadeIzq(&lista1,9);
- //anadeIzq(&lista1,7);
- //anadeIzq(&lista1,8);
- anadeIzq(&lista2,1);
- anadeIzq(&lista2,0);
- anadeIzq(&lista2,9);
- //anadeIzq(&lista2,9);
- //anadeIzq(&lista2,7);
- imprimirLista(&lista1);
- imprimirLista(&lista2);
- listaFinal = suma(&lista1,&lista2);
- imprimirLista(&listaFinal);
- arreglarLista(&listaFinal);
- listaFinal2 = voltearLista(&listaFinal);
- imprimirLista(&listaFinal2);
- }
- void crearLista(TLista *lista){
- lista->inicio = NULL;
- lista->fin = NULL;
- }
- void imprimirLista(TLista *lista){
- TNodo *ptrRec;
- ptrRec = lista->inicio;
- while (ptrRec != NULL){
- printf(" %d ",ptrRec->elem);
- ptrRec = ptrRec->ptrSig;
- }
- printf("NULL\n");
- }
- void listaUnitaria(TLista *lista, int elem){
- TNodo *ptrNuevo;
- ptrNuevo = (TNodo*)malloc(sizeof(TNodo));
- ptrNuevo->elem = elem;
- ptrNuevo->ptrSig = NULL;
- lista->inicio = ptrNuevo;
- lista->fin = ptrNuevo;
- }
- void anadeIzq(TLista *lista, int elem){
- TNodo *ptrNuevo;
- ptrNuevo = (TNodo*)malloc(sizeof(TNodo));
- ptrNuevo->elem = elem;
- ptrNuevo->ptrSig = NULL;
- if (lista->inicio == NULL){
- listaUnitaria(lista,elem);
- }else{
- ptrNuevo->ptrSig = lista->inicio;
- lista->inicio = ptrNuevo;
- }
- }
- void anadeDer(TLista *lista, int elem){
- TNodo *ptrNuevo;
- ptrNuevo = (TNodo*)malloc(sizeof(TNodo));
- ptrNuevo->elem = elem;
- ptrNuevo->ptrSig = NULL;
- if (lista->inicio == NULL){
- listaUnitaria(lista,elem);
- }else{
- lista->fin->ptrSig = ptrNuevo;
- lista->fin = ptrNuevo;
- }
- }
- TLista suma(TLista *l1, TLista *l2){
- TLista listaSum;
- crearLista(&listaSum);
- TNodo *ptrRec1, *ptrRec2;
- ptrRec1 = l1->inicio;
- ptrRec2 = l2->inicio;
- while (ptrRec1 != NULL && ptrRec2 != NULL){
- int num1, num2;
- num1 = ptrRec1->elem;
- num2 = ptrRec2->elem;
- anadeDer(&listaSum,num1 +num2);
- ptrRec1 = ptrRec1->ptrSig;
- ptrRec2 = ptrRec2->ptrSig;
- }
- while (ptrRec1 != NULL){
- anadeDer(l1,ptrRec1->elem);
- ptrRec1 = ptrRec1->ptrSig;
- }
- while (ptrRec2 != NULL){
- anadeDer(l2,ptrRec2->elem);
- ptrRec2 = ptrRec2->ptrSig;
- }
- return listaSum;
- }
- void arreglarLista(TLista *lista){
- TNodo *ptrRec;
- ptrRec = lista->inicio;
- int acc = 0;
- while (ptrRec != NULL){
- if (ptrRec->elem > 9){
- ptrRec->elem = (ptrRec->elem) - 10 + acc;
- acc = 1;
- }
- else{
- ptrRec->elem = ptrRec-> elem + acc;
- if (ptrRec->elem>9){
- ptrRec->elem = 0;
- acc = 1;
- }else{
- acc = 0;
- }
- }
- ptrRec = ptrRec->ptrSig;
- }
- }
- TLista voltearLista(TLista *lista){
- TNodo *ptrRec;
- TLista lista2;
- crearLista(&lista2);
- ptrRec = lista->inicio ;
- while (ptrRec != NULL){
- anadeIzq(&lista2,ptrRec->elem);
- ptrRec = ptrRec->ptrSig;
- }
- return lista2;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement