m0_53178143 2020-12-25 22:41 采纳率: 50%
浏览 23
已采纳

数据结构用Create函数创建两个链表,结果运行不了?

用刚学到的Create函数创建链表,这是我写的代码

```
#include<stdio.h>
#include<stdlib.h>
typedef struct LNode{
    int xi;
    int zhi;
    struct LNode *next;
}LNode,*LinkList;
void create(LinkList &L,int n){
    LinkList p,q;
    L=(LinkList)malloc(sizeof(LNode));
    p=L->next;
    scanf("%d %d",&L->xi,&L->zhi);
    for(int i=1;i<n;i++){
        q=(LinkList)malloc(sizeof(LNode));
        scanf("%d %d",&q->xi,&q->zhi);
        p->next=q;
        p=p->next; 
    }
    p->next=NULL;
}
int main(){
    int n,m;
    scanf("%d %d",&n,&m);
    LinkList LA,LB;
    create(LA,n);
    create(LB,m);
    return 0;
}
```
结果运行不了,我先把LB的Create注释掉,发现LA的可以正常运行,然后我把LA的注释掉,发现LB不能运行,之后发现两个都不能运行了???

下面附可以正常运行的Create函数代码,但我还是不知道为什么上面的不对,希望大佬不吝赐教,谢谢了!!

```
void create(LinkList &L,int n){
    LinkList s,pre,q;
    L=(LinkList)malloc(sizeof(LNode));
    L->next=NULL;
    while(n--){
        s=(LinkList)malloc(sizeof(LNode));
        scanf("%d %d",&s->xi , &s->zhi);
        pre=L;
        q=L->next;
        while(q&&q->zhi<s->zhi){
            pre=q;
            q=q->next;
        }
        s->next=q;
        pre->next=s;
    }  
}
```
 

  • 写回答

1条回答 默认 最新

  • 追逐时代的脚步 2020-12-25 23:25
    关注

    你只要把 p=L->next; 改成 p = L 就行了。因为你下次要赋值的是L->next,而不是L->next->next;

    而且这个时候的L->next指向的内存空间不确定,所以有时是不会报错,有时候会报错。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥20 iqoo11 如何下载安装工程模式
  • ¥15 flask项目,怎么使用AJAX传数据库数据到echarts图表的data里,实现异步加载数据。
  • ¥15 本题的答案是不是有问题
  • ¥15 关于#r语言#的问题:(svydesign)为什么在一个大的数据集中抽取了一个小数据集
  • ¥15 C++使用Gunplot
  • ¥15 这个电路是如何实现路灯控制器的,原理是什么,怎么求解灯亮起后熄灭的时间如图?
  • ¥15 matlab数字图像处理频率域滤波
  • ¥15 在abaqus做了二维正交切削模型,给刀具添加了超声振动条件后输出切削力为什么比普通切削增大这么多
  • ¥15 ELGamal和paillier计算效率谁快?
  • ¥15 蓝桥杯单片机第十三届第一场,整点继电器吸合,5s后断开出现了问题