链表插入操作和显示

时间:2016-02-20 10:30:34

标签: c list

我正在尝试实现单链表并执行插入操作。程序编译并运行但每当我尝试显示其元素时。它不显示元素。我无法找出错误。< / p>

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

struct n
{
    int data;
    struct n *next;
};

typedef struct n node;

node *insert_at_front(node *start,int info)
{
    node *temp,*p;
    temp=(node *)malloc(sizeof(node));
    temp->data=info;
    temp->next=start;
    start=temp;
    return start;
}

node *insert_at_end(node *start,int info)
{
    node *temp,*p;
    temp=(node *)malloc(sizeof(node));
    if(start==NULL)
    {
        printf("Empty\n");
        return start;
    }
    else
    {
        for(p=start; p->next!=NULL; p=p->next)
        {
            if(p->next==NULL)
            {
                temp->data=info;
                temp->next=p->next;
                p->next=temp;
            }
        }
    }
    return start;
}

node *insert_after(node *start,int info,int dat)
{
    node *temp,*p;
    temp=(node *)malloc(sizeof(node));
    for(p=start; p->next!=NULL; p=p->next)
    {
        if(p->data==dat)
        {
            temp->data=info;
            temp->next=p->next;
            p->next=temp;
        }
    }
    return start;
}

void display(node *start)
{
    node *temp;
    if(start==NULL)
    {
        printf("List is Empty\n");
        return ;
    }
    temp=start;
    while(temp!=NULL)
    {
        printf("%d-->",temp->data);
        temp=temp->next;
    }
    printf("\n\n");
}

int main()
{
    int value;
    node *start=NULL;
    int choice,data1;
    while(1)
    {
        printf("\n1.insert_at_start\n2.insert at end.\n3.insert_after");
        printf("\n4.display\n");
        printf("enter choice\n");
        scanf("%d",&choice);
        switch(choice)
        {
        case 1:
            printf("Enter value\n");
            scanf("%d",&value);
            insert_at_front(start,value);
            break;
        case 2:
            printf("Enter value\n");
            scanf("%d",&value);
            insert_at_end(start,value);
            break;
        case 3:
            printf("Enter value\n");
            printf("Enter value after which you want to insert\n");
            scanf("%d%d",&value,&data1);
            insert_after(start,value,data1);
            break;
        case 4:
            display(start);
            break;
        default:
            break;
        }
    }
    return 0;
}

1 个答案:

答案 0 :(得分:1)

您的代码存在的一个问题是您没有使用不同插入过程的返回值。这意味着如果以空列表(NULL)开头,则main无法获得非空列表。

至少您需要更新start,例如:

start = insert_at_front(start,value);