davidnarciso Posted March 18, 2012 at 08:56 PM Report #444513 Posted March 18, 2012 at 08:56 PM Olá Boa noite a todos, estou aqui de volta de listas ligadas em C e estou farto de tentar adicionar elementos no final de uma lista e não consigo 🙂 .. preciso de ajuda. Parte do código feito, a funcionar para adicionar no inicio da lista. #define DATA_INT(node) ((node)->n) #define DATA_STRING(node) ((node)->s) #define NEXT(node) ((node)->next) //--------------------------------- typedef enum _STATUS {OK,ERROR} STATUS; //--------------------------------- typedef struct LISTA_NODE{ int n; char s[N]; struct LISTA_NODE *next; }LISTA_NODE; typedef LISTA_NODE *MINHA_LISTA; STATUS initIntList(MINHA_LISTA *pL) { *pL = NULL; return OK; } //--------------------------------- STATUS insertStartIntList(MINHA_LISTA *pL, int n, char s[]) { LISTA_NODE *pTemp; if(createNewIntNode(&pTemp,n,s)==ERROR) return ERROR; //Depois de adicionar com sucesso um node, avança o que estava em primeiro para a proxima posicao NEXT(pTemp) = *pL; *pL = pTemp; return OK; } //--------------------------------- STATUS createNewIntNode(LISTA_NODE **pNew,int n, char s[]) { LISTA_NODE *pTemp; //Aloca espaço para o novo nódulo if((pTemp=(LISTA_NODE *)malloc(sizeof(LISTA_NODE)))==NULL) return ERROR; //caso consiga introduz os elementos lá dentro. *pNew=pTemp; DATA_INT(pTemp)=n; strcpy(DATA_STRING(pTemp),s); NEXT(pTemp)=NULL; return OK; } //--------------------------------- void main(void) { MINHA_LISTA L; int i; int v1[] = {5,3,8,1,9}; char v2[5][N] = {"cinco","tres","oito","um","nove"}; initIntList(&L); for (i=0; i<5; i++) insertStartIntList(&L,v1[i],v2[i]); //insertEndIntList(&L,v1[2],v2[2]); } Obrigado desde já e desculpem a quantidade de código :s cumprimentos
davidnarciso Posted March 18, 2012 at 09:41 PM Author Report #444523 Posted March 18, 2012 at 09:41 PM Bem, depois de uma ajuda de um colega já resolvi, fica aqui o código caso alguém precise no futuro.. 🙂 STATUS insertEndIntList(MINHA_LISTA *pL, int n, char s[]) { LISTA_NODE *pTemp; if(createNewIntNode(&pTemp,n,s)==ERROR) return ERROR; //se a lista tiver vazia adiciona logo na 1ª posicao if(pL == NULL) { *pL = pTemp; } else { LISTA_NODE *temp; temp = *pL; while (NEXT(temp) != NULL) temp = temp->next; NEXT(temp) = pTemp; return OK; } }
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now