IMfine. 2021-09-24 20:29 采纳率: 72.4%
浏览 63
已结题

自定义的Createlist函数不知道哪里有问题

打印的时候输入两次就断了,不知道为啥

img

img

img

img


{
#include <stdio.h>
#include<stdlib.h>
typedef struct Lnode
{
int data;
struct Lnode *next;
} Lnode,*Linklist;
void Createlist(Linklist &L,int n)
{
int i=1;
Lnode p;
L=(Lnode
)malloc(sizeof(Lnode));
p=L;

  while(i<=n)
   {
   printf("输入链表第%d个元素的值",i);
     scanf("%d",&(p->data));
     p=p->next;
     i++;
   }

}
void ListInsert(Linklist &L,int i,int e,int n)
{
Lnode *p,q;
int j=1;
q=(Lnode
)malloc(sizeof(Lnode));
q->data=e;
p=L->next;
while(p&&(j<i-1)&&(i<n))
{
printf("%d,",p->data);
p=p->next;
j++;
}
if(!p||j>i-1||i>n) printf("不合法\n");
q->next=p->next;
p->next=q;
}
int main()
{
int i,e,n;
Lnode *L;
L=(Lnode *)malloc(sizeof(Lnode));
printf("请输入需要链表的元素个数\n");
scanf("%d",&n);
Createlist(L,n);
printf("请输入要插入元素的位序\n");
scanf("%d",&i);
printf("请输入要插入的数值\n");
scanf("%d",&e);
printf("请输入原链表元素个数\n");
scanf("%d",&n);
ListInsert(L,i,e,n);
return 0;
}

}

  • 写回答

3条回答 默认 最新

  • qzjhjxj 2021-09-24 22:32
    关注

    供参考:

    #include <stdio.h>
    #include<stdlib.h>
    typedef struct Lnode
    {
        int data;
        struct Lnode *next;
    }Lnode,*Linklist;
    void Createlist(Linklist &L,int n)
    {
        int i=1;
        Lnode *p=L,*q;                  //修改,增加 q 指针变量
        //L=(Lnode)malloc(sizeof(Lnode)); //修改
        //p=L;                            //修改
        while(i<=n)
        {
           q=(Lnode*)malloc(sizeof(Lnode));//修改
           printf("输入链表第%d个元素的值",i);
           scanf("%d",&q->data); //修改
           q->next=NULL;         //修改
           p->next=q;            //修改 尾插法
           p=q;                  //修改
           i++;
        }
    }
    void ListInsert(Linklist &L,int i,int e)//修改
    {
        Lnode *p,*q;
        int j=1;
        p=L->next;
        while(p && j<i-1)//修改
        {
            //printf("%d,",p->data);//修改
            p=p->next;
            j++;
        }
        if(!p || i<1 || j<i-1)//修改
        {
            printf("不合法\n");
            return;          //修改
        }
        q=(Lnode*)malloc(sizeof(Lnode));//修改 移到这里,上面判断没问题再申请空间
        q->data=e;
        q->next=NULL;
        if(i==1)p=L;  //修改 判断是否在第一个结点插入
        q->next=p->next;
        p->next=q;
    }
    void print(Linklist L) //增加打印输出函数
    {
        Linklist p=L->next;
        while(p)
        {
            printf("%d ",p->data);
            p=p->next;
        }
        printf("\n");
    }
    int main()
    {
        int i,e,n;
        Lnode *L;
        L=(Lnode *)malloc(sizeof(Lnode));
        printf("请输入需要链表的元素个数\n");
        scanf("%d",&n);
        Createlist(L,n);
        print(L);      //增加打印输出看结果
    
        printf("请输入要插入元素的位序\n");
        scanf("%d",&i);
        printf("请输入要插入的数值\n");
        scanf("%d",&e);
        //printf("请输入原链表元素个数\n");//修改
        //scanf("%d",&n);                  //修改
        ListInsert(L,i,e);                 //修改
        print(L);                         //增加打印输出看结果
    
        return 0;
    }
    
    
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

问题事件

  • 系统已结题 10月3日
  • 已采纳回答 9月25日
  • 修改了问题 9月24日
  • 修改了问题 9月24日
  • 展开全部

悬赏问题

  • ¥20 如何通过代码传输视频到亚马逊平台
  • ¥15 php查询mysql数据库并显示至下拉列表中
  • ¥15 freertos下使用外部中断失效
  • ¥15 输入的char字符转为int类型,不是对应的ascall码,如何才能使之转换为对应ascall码?或者使输入的char字符可以正常与其他字符比较?
  • ¥15 devserver配置完 启动服务 无法访问static上的资源
  • ¥15 解决websocket跟c#客户端通信
  • ¥30 Python调用dll文件输出Nan重置dll状态
  • ¥15 浮动div的高度控制问题。
  • ¥66 换电脑后应用程序报错
  • ¥50 array数据同步问题