Алгоритм удаления двусвязного списка - PullRequest
0 голосов
/ 30 мая 2018
#include<stdio.h>
#include<malloc.h>

struct list {
    char name[30];
    char subject1[30];
    char subject2[30];
    struct list* next;
    struct list* previous;
};

typedef struct list node;

node input(node* n1)
{
    node n2;
    n2.previous=n1;
    n1->next=&n2;
    n2.next=NULL;
    scanf("%s",n2.name);
    scanf("%s",n2.subject1);
    scanf("%s",n2.subject2);
    return n2;
}

void delete(node *n1)
{
    if(n1->next!=NULL)  
        n1->previous->next=n1->next;
    else
        n1->previous->next=NULL;
    if(n1->previous!=NULL)  
        n1->next->previous=n1->previous;
    printf("\nDeleting....");
    free(n1);
}

int main()
{
    node* start;
    start=(node*)malloc(sizeof(node));
    node n1=input(start);
    node n2=input(&n1);
    start->previous=NULL;
    printf("%s %s %s %s %s %s",n1.name,n1.subject1,n1.subject2,n2.name,n2.subject1,n2.subject2);
    delete(&n1);
    delete(&n2);
    delete(start);
    return 0;
}

Удаление не происходит должным образом.Это дает необработанное исключение, возвращающее ошибку 255.Кроме того, в книгах удаляется только узел n1, а начальный (заголовок) и последний узел остаются без изменений.Но я хочу удалить все узлы и заголовок.Пожалуйста, объясните и исправьте.Кроме того, я пишу этот код на C и C ++.Пожалуйста, исправьте соответственно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...