honglili_ya 2021-04-09 21:19 采纳率: 25%
浏览 12

数据结构单链表的合并不知道为什么运行不出来求帮忙解答

#include <stdio.h>
#include <stdlib.h>
#define OK 1
#define  ERROR 0
typedef struct Lnode{
int data;    //数据域
struct Lnode *next;  //指针域
}Lnode,*Linklist;  //*Linklist为Lnode类型的指针

int   CreateList(Linklist L,int n)  //头插法
{
 Linklist p,q;
    p = L;//第一步,取到头结点,两个指针指向同一内存,改变p指向的内存,L指向的内存不变,L仍为头结点
    printf("请输入%d个数:\n", n);
    for (int i = 1; i <= n; i++)
 {
        q = (Linklist)malloc(sizeof(int));
        if (!p)
  {
            printf("p的初始化出现问题!\n");
            return 0;
        }
              scanf("%d", &q->data);
         q->next = p->next;//第二步链接两个结点
         p->next = q;//第二步链接两个结点
         p = q;//关键的一步,更换位置,进行下次循环

        }
        return 1;
 }

int getLinklist(Linklist L,int a){    //打印链表
    int n=a;
   if(!L->next)
  {
      printf("链表没有节点,不能输出");
       return 0;
   }
   Linklist p;
   p=L->next;
  for(int i=0;i<n;i++)
{
       printf("%d ",p->data);
       p=p->next;
   }
   return 0;
}

int MergeList_L(Linklist La, Linklist Lb, Linklist Lc) {
    Lnode *pa,*pb,*pc;//按值排序的单链表LA,LB,归并为LC后也按值排序
    pa=La->next;
    pb=Lb->next;
     Lc=pc=La; //初始化 ,用La的头结点作为Lc的头结点
     while(pa && pb) //将pa ,pb结点按大小依次插入C中
        {
     if(pa->data <= pb->data)
     {
      pc->next=pa;//把La插入到Lc后面,此时Lc位于倒数第二个节点
      pc=pa;//把pc往后移让pc始终指向最后一个节点
      pa=pa->next;
      }
      else
     {
        pc->next=pb;
        pc=pb;
        pb=pb->next;
         }
             }
      pc->next=pa?pa:pb; //插入剩余段
      free(Lb);//释放Lb的头结点
     return Lc;
      } //MergeList_L ,O(n1+n2)

int main()

{
    int a,b,sum=0;
    Linklist *La=(Linklist*)malloc(sizeof(Lnode));
      Linklist *Lb=(Linklist*)malloc(sizeof(Lnode));
        Linklist *Lc=(Linklist*)malloc(sizeof(Lnode));

 printf("请问您想给表La输入几个数:");
 scanf("%d",&a);
CreateList(La,a);
sum+=a;

printf("请问您想给表Lb输入几个数:");
 scanf("%d",&b);
CreateList(Lb,b);
sum+=b;

MergeList_L(La,Lb,Lc);
 getLinklist(Lc,sum);
    return 0;
}
  • 写回答

1条回答 默认 最新

  • cpp_learners 2021-04-10 14:17
    关注

    我很好奇你的代码是如何运行起来的。

    Linklist *La = (Linklist*)malloc(sizeof(Lnode));
    Linklist *Lb = (Linklist*)malloc(sizeof(Lnode));
    Linklist *Lc = (Linklist*)malloc(sizeof(Lnode));

    这里定义的是二级指针。

    但是函数参数是一级指针。

    int   CreateList(Linklist L, int n)  //头插法

    int MergeList_L(Linklist La, Linklist Lb, Linklist Lc)

    评论

报告相同问题?

悬赏问题

  • ¥15 有偿求苍穹外卖环境配置
  • ¥15 代码在keil5里变成了这样怎么办啊,文件图像也变了,
  • ¥20 Ue4.26打包win64bit报错,如何解决?(语言-c++)
  • ¥15 clousx6整点报时指令怎么写
  • ¥30 远程帮我安装软件及库文件
  • ¥15 关于#自动化#的问题:如何通过电脑控制多相机同步拍照或摄影(相机或者摄影模组数量大于60),并将所有采集的照片或视频以一定编码规则存放至规定电脑文件夹内
  • ¥20 深信服vpn-2050这台设备如何配置才能成功联网?
  • ¥15 Arduino的wifi连接,如何关闭低功耗模式?
  • ¥15 Android studio 无法定位adb是什么问题?
  • ¥15 C#连接不上服务器,