一张黑桃K 2024-09-27 21:29 采纳率: 96.9%
浏览 4
已采纳

数据结构链表的合并,会写的看一下吧

题目描述
已知线性表LA和LB中的数据元素按值非递减有序排列,现要求将LA和LB归并为一个新的线性表LC且LC中的数据元素仍按值非递减有序列排列。
输入
输入数据共4行:
第1行:LA的数据元素的数目
第2行:LA中的各数据元素,以空格间隔
第3行:LB的数据元素的数目
第4行:LB中的各数据元素,以空格间隔
输出
依次输出LC中各数据元素的值。
样例输入 复制
4
1 2 6 7
3
1 3 5
样例输出 复制
1 1 2 3 5 6 7

#include "stdio.h"
#include "stdlib.h"

typedef int ElemType;

typedef struct Node {
    ElemType data;
    struct Node *next;
} LNode,*linkList;
void initList(linkList &L);
void inputList(linkList L);
void printList(linkList L);
void mergeList(linkList LA,linkList LB,linkList LC);

int main(void) {
    linkList LA,LB,LC;
    initList(LA);
    inputList(LA);
    initList(LB);
    inputList(LB);
    initList(LC);
    mergeList(LA,LB,LC);
    printList(LC);
    return 0;
}

void initList(linkList &L) {
    L=new LNode;
    L->next=NULL;
}

void inputList(linkList L) {//尾插入法建立链表 
    int n;
    linkList p,tail;
    tail=L;
    scanf("%d",&n);
    for(int i=0; i<n; i++) {
        p=new LNode;
        scanf("%d",&p->data);
        p->next=NULL;
        tail->next=p;
        tail=p;
    }
}

void printList(linkList L) {
    linkList p=L->next;
    while(p!=NULL) {
        printf("%d ",p->data);
        p=p->next;
    }
    printf("\n");
}

void mergeList(linkList LA,linkList LB,linkList LC){
    linkList pa,pb,pc;
    pa=LA->next; pb=LB->next; pc=LC;
    while(________________){
        if(__________________){
            
        }
        else{
        }
    }
    pc->next=pa!=NULL?pa:pb;
    delete LA;
    delete LB;
}


  • 写回答

2条回答 默认 最新

  • fengbizhe 2024-09-27 23:38
    关注
    
    void mergeList(linkList LA,linkList LB,linkList LC){
        linkList pa,pb,pc;
        pa=LA->next; pb=LB->next; pc=LC;
        while(pa&&pb){//都是有序,就比较两节点大小,然后尾插法往后插就好啦
                if(pa->data>pb->data)
                {
                  pc->next=pb;
                  pc=pb;
                  pb=pb->next;
                }
                else
                {
                    pc->next=pa;
                    pc=pa;
                    pa=pa->next;
                }
        }
        pc->next=pa!=NULL?pa:pb;//这句话,很巧妙哦,如有一线性表还有剩余,因为线性表是连一起的,所以直接把那个节点接在后面就好了
        delete LA;
        delete LB;
    }
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

问题事件

  • 已采纳回答 9月28日
  • 创建了问题 9月27日

悬赏问题

  • ¥15 如何在vue.config.js中读取到public文件夹下window.APP_CONFIG.API_BASE_URL的值
  • ¥50 浦育平台scratch图形化编程
  • ¥20 求这个的原理图 只要原理图
  • ¥15 vue2项目中,如何配置环境,可以在打完包之后修改请求的服务器地址
  • ¥20 微信的店铺小程序如何修改背景图
  • ¥15 UE5.1局部变量对蓝图不可见
  • ¥15 一共有五道问题关于整数幂的运算还有房间号码 还有网络密码的解答?(语言-python)
  • ¥20 sentry如何捕获上传Android ndk 崩溃
  • ¥15 在做logistic回归模型限制性立方条图时候,不能出完整图的困难
  • ¥15 G0系列单片机HAL库中景园gc9307液晶驱动芯片无法使用硬件SPI+DMA驱动,如何解决?