Devilあ 2022-09-21 17:08 采纳率: 72.7%
浏览 38
已结题

c语言单链表插入,只输入一个就停止运行了

c语言单链表只输入一个数字就停止运行了

#include<stdio.h>
#include<stdlib.h>
#include<malloc.h>
typedef struct node
{
int data;
struct node* next;
}node,linklist;
void initlist(node
L)
{
L->next=NULL;
}
void createlist(node* head,int n)
{
node* s;
node* tail;
int j;
tail=head;
for(int i=0;i<n;i++)
{
scanf("%d",&j);
s=(node*)malloc(sizeof(node));
s->data=j;
tail->next=s;
tail=s;
}
}
void printlist(node* L)
{
while(L->next!=NULL)
{
printf("%d ",L->next->data);
L=L->next;
}
}
void enterlist(node* L,int x,int e)
{
node*p,s;
int i=0;
if(x<=0)
{
printf("-1");
}
p=L;
while(p!=NULL&&i<x-1)
{
p=p->next;
i++;
}
if(p==NULL)
{
printf("-1");
}
s=(node
)malloc(sizeof(node));
s->data=e;
s->next=p->next;
p->next=s;
}
int main()
{
linklist L;
int n,x,e;
scanf("%d",&n);
initlist(L);
createlist(L,n);
scanf("%d%d",&x,&e);
enterlist(L,x,e);
printlist(L);
return 0;
}

弄了好久,希望实现单链表的插入
  • 写回答

3条回答 默认 最新

  • qzjhjxj 2022-09-21 20:10
    关注

    修改如下,供参考:

    #include<stdio.h>
    #include<stdlib.h>
    #include<malloc.h>
    typedef struct Node
    {
        int data;
        struct Node* next;
    }node,*linklist;
    void initlist(node** L) //修改
    {
        (*L) = (node*)malloc(sizeof(node)); //修改
        if ((*L) == NULL)  return;        //修改
        (*L)->next = NULL;                //修改
    }
    void createlist(node* head,int n)
    {
        node* s;
        node* tail;
        int j;
        tail=head;
        for(int i=0;i<n;i++)
        {
            scanf("%d",&j);
            s=(node*)malloc(sizeof(node));
            s->next = NULL;  //修改
            s->data=j;
            tail->next=s;
            tail=s;
        }
    }
    void printlist(node* L)
    {
        while(L->next!=NULL)
        {
            printf("%d ",L->next->data);
            L=L->next;
        }
    }
    void enterlist(node* L,int x,int e)
    {
        node*p,*s;
        int i=0;
        if(x<=0)
        {
            printf("-1\n");
            return;  // 修改
        }
        p=L;
        while(p!=NULL && i < x-1)
        {
            p=p->next;
            i++;
        }
        if(p->next == NULL)//修改
        {
            printf("-1\n");
            return;  // 修改
        }
        s=(node*)malloc(sizeof(node));
        s->data=e;
        s->next=p->next;
        p->next=s;
    }
    int main()
    {
        linklist L;
        int n,x,e;
        initlist(&L); //修改
    
        scanf("%d",&n);
        createlist(L,n);
    
        scanf("%d%d",&x,&e);
        enterlist(L,x,e);
    
        printlist(L);
        return 0;
    }
    
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

问题事件

  • 系统已结题 9月30日
  • 已采纳回答 9月22日
  • 创建了问题 9月21日

悬赏问题

  • ¥20 给自己本科IT专业毕业的妹m找个实习工作
  • ¥15 用友U8:向一个无法连接的网络尝试了一个套接字操作,如何解决?
  • ¥30 我的代码按理说完成了模型的搭建、训练、验证测试等工作(标签-网络|关键词-变化检测)
  • ¥50 mac mini外接显示器 画质字体模糊
  • ¥15 TLS1.2协议通信解密
  • ¥40 图书信息管理系统程序编写
  • ¥20 Qcustomplot缩小曲线形状问题
  • ¥15 企业资源规划ERP沙盘模拟
  • ¥15 树莓派控制机械臂传输命令报错,显示摄像头不存在
  • ¥15 前端echarts坐标轴问题