萌新新新新新新新新新新嗷呜 2021-10-21 11:58 采纳率: 100%
浏览 66
已结题

单链表实现运行没有结果求看看程序问题

程序块也显示不了结果,求指教


#include <stdio.h>
#include <stdlib.h>
#define LNODE 10
typedef struct
{
    int data;
    struct  LNode *next;
}LNode;
int GetElem(LNode l,int i,int *e)
{
    LNode *p;
    p=l.next;
    int j=1;
    while(p&&j<i)
    {
        p=p->next;
        ++j;
    }
    if(!p||j>i)
    {
        return 0;
    }
}
LNode LocateElem(LNode l,int e)
{
    LNode *p;
    p=l.next;
    while(p&&p->data!=e)
    {
        p=p->next;
    }
    return *p;
}
int ListInsert(LNode *l,int i,int e)
{
    LNode *p;
    p=l->next;
    int j=0;
    while(p&&(j<i-1))
    {
        p=p->next;
        ++j;
    }
    if(!p||j>i-1)
    {
        return 0;
    }
    LNode *s;
    s=(LNode*)malloc(sizeof(LNode));
    s->data=e;
    s->next=p->next;
    p->next=s;
    return 1;
}
int ListDelete(LNode *l,int i)
{
    LNode *p,*s;
    int j=0;
    while(p->next&&(j<i-1))
    {
        p=p->next;
        ++j;
    }
    if(!(p->next)||(j>i-1))
    {
        return 0;
    }
    s=p->next;
    p->next=s->next;
    free(s);
    return 1; 
}
void Create(LNode *l,int n)
{
    int i;
    l=(int*)malloc(LNODE*sizeof(int));
    l->next=0;
    printf("please input:");
    for(i=0;i<n;i++)
    {
        LNode *p;
        p=(LNode*)malloc(sizeof(LNode));
        scanf("%d",&p->data);
        p->next=l->next;
        l->next=p;
    }
}
void MergeList(LNode *LA,LNode *LB,LNode *LC)
{
    LNode *pa,*pb,*pc;
    pa=LA->next;pb=LB->next;
    LC=LA;
    pc=LC;
    while(pa&&pb)
    {
        if(pa->data<=pb->data)
        {
            pc->next=pa;
            pc=pa;
            pa=pa->next;
        }
        else
        {
            pc->next=pb;
            pc=pb;
            pa=pb->next;
        }
    }
    pc->next=pa?pa:pb;
    free(LB);
}
void Print(LNode *l)
{
    LNode *p;
    p=l->next;
    if(l->next==0)
    {
        printf("0\n");
    }
    while(p)
    {
        printf("%d\n",p->data);
        p=p->next;
    }
}
int main()
{
    LNode L1,L2,L3;
    L1.next=0;
    Create(&L1,3);
    Print(&L1);
    
    L2.next=0;
    Create(&L2,3);
    Print(&L2);
    
    MergeList(&L1,&L2,&L3);
    
    Print(&L3);
    return 0;
}
  • 写回答

4条回答 默认 最新

  • 关注

    错误的地方在代码中标记出来了
    代码修改如下:

    
    #include <stdio.h>
    #include <stdlib.h>
    #define LNODE 10
    //结构体定义修改如下
    struct LNode
    {
        int data;
        struct  LNode *next;
    };
    int GetElem(LNode l,int i,int *e)
    {
        LNode *p;
        p=l.next;
        int j=1;
        while(p&&j<i)
        {
            p=p->next;
            ++j;
        }
        if(!p||j>i)
        {
            return 0;
        }
    }
    LNode LocateElem(LNode l,int e)
    {
        LNode *p;
        p=l.next;
        while(p&&p->data!=e)
        {
            p=p->next;
        }
        return *p;
    }
    int ListInsert(LNode *l,int i,int e)
    {
        LNode *p;
        p=l->next;
        int j=0;
        while(p&&(j<i-1))
        {
            p=p->next;
            ++j;
        }
        if(!p||j>i-1)
        {
            return 0;
        }
        LNode *s;
        s=(LNode*)malloc(sizeof(LNode));
        s->data=e;
        s->next=p->next;
        p->next=s;
        return 1;
    }
    int ListDelete(LNode *l,int i)
    {
        LNode *p,*s;
        int j=0;
        while(p->next&&(j<i-1))
        {
            p=p->next;
            ++j;
        }
        if(!(p->next)||(j>i-1))
        {
            return 0;
        }
        s=p->next;
        p->next=s->next;
        free(s);
        return 1; 
    }
    void Create(LNode *l,int n)
    {
        int i;
        LNode *t = l;
        //l=(int*)malloc(LNODE*sizeof(int)); //因为传进来的是局部变量,系统已经自动分配内存了,这里不需要再申请内存
        l->next=0;
        printf("please input:");
        for(i=0;i<n;i++)
        {
            LNode *p;
            p=(LNode*)malloc(sizeof(LNode));
            scanf("%d",&p->data);
            p->next= 0;//l->next;  //这里的next应该是0
            t->next=p;
            t = p; //这里添加一句
        }
    }
    void MergeList(LNode *LA,LNode *LB,LNode *LC)
    {
        LNode *pa,*pb,*pc;
        pa=LA->next;pb=LB->next;
        *LC=*LA;
        pc=LC;
        while(pa&&pb)
        {
            if(pa->data<=pb->data)
            {
                pc->next=pa;
                pc=pa;
                pa=pa->next;
            }
            else
            {
                pc->next=pb;
                pc=pb;
                pa=pb->next;
            }
        }
        pc->next=pa?pa:pb;
        //free(LB);  //这里不要释放内存
    }
    void Print(LNode *l)
    {
        LNode *p;
        p=l->next;
        if(l->next==0)
        {
            printf("0\n");
        }
        while(p)
        {
            printf("%d\n",p->data);
            p=p->next;
        }
    }
    int main()
    {
        LNode L1,L2,L3;
        L1.next=0;
        Create(&L1,3);
        Print(&L1);
        L2.next=0;
        Create(&L2,3);
        Print(&L2);
        MergeList(&L1,&L2,&L3);
        Print(&L3);
        return 0;
    }
    
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(3条)

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 10月27日
  • 已采纳回答 10月21日
  • 创建了问题 10月21日

悬赏问题

  • ¥15 乌班图ip地址配置及远程SSH
  • ¥15 怎么让点阵屏显示静态爱心,用keiluVision5写出让点阵屏显示静态爱心的代码,越快越好
  • ¥15 PSPICE制作一个加法器
  • ¥15 javaweb项目无法正常跳转
  • ¥15 VMBox虚拟机无法访问
  • ¥15 skd显示找不到头文件
  • ¥15 机器视觉中图片中长度与真实长度的关系
  • ¥15 fastreport table 怎么只让每页的最下面和最顶部有横线
  • ¥15 R语言卸载之后无法重装,显示电脑存在下载某些较大二进制文件行为,怎么办
  • ¥15 java 的protected权限 ,问题在注释里