Ir para o conteúdo
matiklsd

Remoção de um elemento numa lista ligada

Mensagens Recomendadas

matiklsd    0
matiklsd

Boas tardes, tenho esta função que me permite retirar elementos de uma lista. Se for o primeiro elemento da lista ele não consegue remover, mas se for um outro elemento que não o primeiro, já executa correctamente, alguém me pode dar uma ajuda e dizer-me o que pode estar incorrecto?

char deleteStudent(StudentPtr *studentPtr, 
        const int IDNUMBER) {


    StudentPtr previousStudentPtr; /* pointer to previous node in list */
    StudentPtr currentStudentPtr; /* pointer to current node in list */
    StudentPtr tempStudentPtr; /* temporary node pointer */

    /* delete first node */
    if (IDNUMBER == (*studentPtr)->idnumber) {
        tempStudentPtr = *studentPtr;
        *studentPtr = (*studentPtr)->nextPtr; /* de-thread the node */
        free(tempStudentPtr); /* free the de-threaded node */
    }/* end if */ 
    else {
        previousStudentPtr = *studentPtr;
        currentStudentPtr = (*studentPtr)->nextPtr;

        /* loop to find the correct location in the list */
        while (currentStudentPtr != NULL &&
                currentStudentPtr->idnumber != IDNUMBER) {
            previousStudentPtr = currentStudentPtr; /* walk to ... */
            currentStudentPtr = currentStudentPtr->nextPtr; /* ... next node */
        }/* end while */

        /* delete node at currentPtr */
        if (currentStudentPtr != NULL) {
            tempStudentPtr = currentStudentPtr;
            previousStudentPtr->nextPtr = currentStudentPtr->nextPtr;
            free(tempStudentPtr);
            return IDNUMBER;
        }/* end if */

    }/* end else */

    return '\0';
}/* end function delete */

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
KTachyon    272
KTachyon

Quando sais da função, o que quer que esteja a apontar para o antigo primeiro nó da lista, agora estará a apontar para... ?

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!

Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.

Entrar Agora


×

Aviso Sobre Cookies

Ao usar este site você aceita os nossos Termos de Uso e Política de Privacidade