彗星爱酿酒 2023-03-28 00:34 采纳率: 59.3%
浏览 80
已结题

关于单链表的插入问题

这么写有什么不对吗,为什么它运行不了?有些不太理解,希望有人能具体解惑一下,如果可以的话,请讲的简单易懂一点。

#include <stdio.h>
#include <stdlib.h>
typedef struct Node {
    int Data;
    struct Node *Next;
}node,*List; 

List Read(); 
void Print( List L ); 
List Insert( List L, int X );

int main()
{
    List L;
    int X;
    L = Read();
    scanf("%d", &X);
    L = Insert(L, X);
    Print(L);
    return 0;
}
List Insert( List L, int X )
{
    List pr;
    pr=(List)malloc(sizeof(struct Node));
    if(X<=L->Data){
        pr->Next=L;
        pr->Data=X;
        return pr;
    }else{
        if(L->Next==NULL){
            L->Next=pr;
            pr->Data=X;
            pr->Next=NULL;
            
        }else{
            L->Next=Insert(L->Next,X);
        }
    }
    return L;
}

List Read(){
    List L,h;
    L=h=(List)malloc(sizeof(struct Node));
    int i,n;
    scanf("%d",&n);
    for(i=1;i<=n;i++){
        L=(List)malloc(sizeof(struct Node));
        scanf("%d",L->Data);
        L=L->Next;
    }
    L->Next=NULL;
    L=h->Next;
    free(h);
    h=L;
    return h;
}
void Print( List L){
    while(L->Next!=NULL){
        printf("%d",L->Data);
        L=L->Next;
    }
}

  • 写回答

2条回答 默认 最新

  • threenewbee 2023-03-28 07:55
    关注

    目测有3个错误
    List Insert(List L, int X) 函数中应该先判断 L 是否为 NULL。
    scanf("%d", L->Data) 应该改为 scanf("%d", &(L->Data))。
    Print 函数中的 while(L->Next!=NULL) 应该改为 while(L!=NULL)。

    #include <stdio.h>
    #include <stdlib.h>
    
    typedef struct Node {
        int Data;
        struct Node *Next;
    } node, *List;
    
    List Read();
    void Print(List L);
    List Insert(List L, int X);
    
    int main()
    {
        List L;
        int X;
        L = Read();
        scanf("%d", &X);
        L = Insert(L, X);
        Print(L);
        return 0;
    }
    
    List Insert(List L, int X)
    {
        if (L == NULL) {
            L = (List)malloc(sizeof(struct Node));
            L->Data = X;
            L->Next = NULL;
        } else {
            if (X <= L->Data) {
                List pr;
                pr = (List)malloc(sizeof(struct Node));
                pr->Next = L;
                pr->Data = X;
                L = pr;
            } else {
                L->Next = Insert(L->Next, X);
            }
        }
        return L;
    }
    
    List Read()
    {
        List L, h;
        L = h = (List)malloc(sizeof(struct Node));
        int i, n;
        scanf("%d", &n);
        for (i = 1; i <= n; i++) {
            L->Next = (List)malloc(sizeof(struct Node));
            scanf("%d", &(L->Next->Data));
            L = L->Next;
        }
        L->Next = NULL;
        L = h->Next;
        free(h);
        h = L;
        return h;
    }
    
    void Print(List L)
    {
        while (L != NULL) {
            printf("%d ", L->Data);
            L = L->Next;
        }
    }
    
    
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 3月29日
  • 已采纳回答 3月28日
  • 创建了问题 3月28日

悬赏问题

  • ¥15 matlab中使用gurobi时报错
  • ¥15 WPF 大屏看板表格背景图片设置
  • ¥15 这个主板怎么能扩出一两个sata口
  • ¥15 不是,这到底错哪儿了😭
  • ¥15 2020长安杯与连接网探
  • ¥15 关于#matlab#的问题:在模糊控制器中选出线路信息,在simulink中根据线路信息生成速度时间目标曲线(初速度为20m/s,15秒后减为0的速度时间图像)我想问线路信息是什么
  • ¥15 banner广告展示设置多少时间不怎么会消耗用户价值
  • ¥16 mybatis的代理对象无法通过@Autowired装填
  • ¥15 可见光定位matlab仿真
  • ¥15 arduino 四自由度机械臂