Не удается удалить узел из конца связанного списка - PullRequest
0 голосов
/ 13 мая 2011

У меня проблема с удалением последнего узла моего связанного списка.Я поставил функции printf, чтобы проверить и найти ошибку, но не могу ее найти.Это мой код для удаления последнего узла из несортированного связанного списка.В конце вы увидите четыре функции добавления, и они успешно работают.Единственная сломанная часть - удаление с конца.

void del_Node(LIST* list, int counter) {

    if( counter == 0 )
        return;

    NODE* temp = list->header;

    int count=1;

    if( list->header == NULL ) {
        printf("The list is already EMPTY\n");
        return;
    }

    while( count != counter ) {
        temp = temp->next;
        count++;
    }

    printf("%s %s\n", temp->first_name, temp->last_name);

    if( list->counter == 1 ) { // Condition for deleting the last node of the linked list

        list->header = NULL;
        list->tail = NULL;

        temp->next = NULL;
        temp->pre = NULL;

        list->counter--;

    }

    else if( list->header == temp ) { // Condition for deleting from the beginnig

        list->header = temp->next;

        printf("%s listenin basından silindi\n", temp->first_name);

        temp->next = NULL;
        temp->pre = NULL;

        list->counter--;

    }

    else if ( list->tail == temp ) { // Condition for deleting from the end

        list->tail = temp->pre;

        printf("%s normal listenin tailinden silindi yeni tail %s\n", temp->first_name, temp->pre->first_name);

        temp->next = NULL;
        temp->pre = NULL;

        list->counter--;

    }

    else { // Condition from deleting from the middle

        temp->pre->next = temp->next;

        temp->next->pre = temp->pre;

        printf("%s normal listede %s------%s arasından silindi\n",temp->first_name, temp->next->first_name, temp->pre->first_name);

        temp->next = NULL;
        temp->pre = NULL;

        list->counter--;

    }

    del_fn_name(list, temp);
    del_ln_name(list, temp);
    del_bdt(list, temp);
    del_city(list, temp);

    free(temp);

    printf("List->counter = %d %d %d\n", list->counter, list->fn_count, list->ln_count );
}

1 Ответ

2 голосов
/ 13 мая 2011

кажется, ты забыл temp->pre->next = NULL;

...