在末尾插入一个节点,并在双链表中删除一个节点

时间:2013-06-07 10:14:13

标签: c linux malloc doubly-linked-list

双重链表计划

#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);
}

我写了一个双链表来插入一个节点,并在linux下使用C语言删除一个节点。     但在执行程序时会出现错误分段错误。     我也在发布输出。

./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             

这是我的代码,请帮我运行并调试它。我在末尾插入节点并在末尾删除节点

1 个答案:

答案 0 :(得分:0)

在第一次插入期间,全局变量last等于0,因此您收到了段错误信号。