-1

二重連結リスト プログラム

#include<stdio.h>
#include<stdlib.h>

struct node  
{
    int data;
    struct node *rnext;
    struct node*lnext;
}*first=NULL,*last=NULL;

void  display()
{
    struct node*temp;

    if(first==NULL)
    {
        printf("list is empty\n");
        return;
    }

    temp=first;

    while(temp!=NULL)
    {
        printf("%d \n",temp->data);
        temp=temp->rnext;
    }
}

void  insertion()
{
    struct node *temp;
    struct node *nn= (struct node*) malloc(sizeof(struct node));
    printf("enter data to be inserted\n");
    nn->rnext=NULL;
    last->rnext=nn;
    nn->lnext=last;
    last=nn;
}

void deletion()
{
    struct node *temp;

    if(first==NULL||last==NULL)
    {
        printf("list is empty\n");
        return;
    }

    temp=first;
    first=first->rnext;
    first->lnext=NULL;
    free(temp);
}

/* main loop */

int  main()    
{
    int option;
    do
    {
        printf("enter option 1.insertion\n2.display\n3.deletion\n4.exit\n");
        scanf("%d",&option);
        switch(option)
        {
            case 1:
                insertion();
                break;
            case 2:
                display();
                break;
            case 3:
                deletion();
                break;
        }
    } while(option!=4);
}

C言語を使用して、Linuxで最後にノードを挿入し、最初にノードを削除する二重リンクリストを作成しました。しかし、プログラムの実行中にエラーセグメンテーション違反が発生しました。私も出力を投稿しています。

./out
enter option 1.insertion
2.display
3.deletion
4.exit
1
enter data to be inserted
12 
Segmentation fault
please help me with the solution for segmentation fault             

これは私のコードです。実行してデバッグするのを手伝ってください。最後にノードを挿入し、最後にノードを削除しています

4

1 に答える 1