Как сохранить указатель на последний узел - PullRequest
0 голосов
/ 23 мая 2018

Здесь у меня есть функция удаления по позиции для двусвязных списков.Я пытаюсь сохранить указатель на последний узел, чтобы при печати в обратном направлении мне не приходилось выполнять итерацию до последнего узла.

node* deleteByPos(node* list, node** last, int position) {
    int c = 0;
    node* temp;
    node* prev;

    temp=list;
    if (temp==NULL) {
        printf("No nodes available to delete\n\n");
        return list;
    } else {
        while(temp!=NULL && c != position) {
            prev=temp;
            temp=temp->next;
            c++;
        }
        if (temp==NULL) {
            printf("Reached end of list, position not available\n\n");
            return list;
        } else if (temp->next == NULL) {
            prev->next=temp->next;
            temp->next->prev = prev;
            &last = temp->next;
            free(temp);
            return list;
        } else {
            prev->next=temp->next;
            temp->next->prev = prev;
            free(temp);
            return list;
        }
    }
}

Когда я пытаюсь удалить последнюю позицию в списке,Я получаю ошибку сегментации.Как мне исправить?

1 Ответ

0 голосов
/ 23 мая 2018

В вашем блоке else else if (tmp-> next == NULL) у вас есть строка

temp->next->prev = prev;

Это недопустимо.Вы пытаетесь использовать нулевой указатель.

...