02-线性结构1 两个有序链表序列的合并 (15分)

题目:https://pta.patest.cn/pta/test/1342/exam/3/question/19208

注意

  提交时候只需要把Merge的函数提交即可

  定义变量 记得及时初始化 尤其是在malloc时候 特别注意

#include <stdio.h>
#include <stdlib.h>

typedef int ElementType;
typedef struct Node *PtrToNode;
struct Node {
    ElementType Data;
    PtrToNode   Next;
};
typedef PtrToNode List;

List Read(){
    int T = 0, K = 0;
    List Last = NULL;
    List L = NULL;
    scanf("%d", &T);
    if(T == 0){
        return NULL;
    }
    L = (List)malloc(sizeof(struct Node));
    L -> Next = NULL;
    Last = L;
    for(int i = 0 ; i < T; ++i){
        scanf("%d", &K);
        List node = (List)malloc(sizeof (struct Node));
        node -> Data = K;
        node -> Next = NULL;
        Last -> Next = node;
        Last = node;
    }
    return L;
}
void Print(List L){
    if(L -> Next == NULL){
        puts("NULL");
        return;
    }
    L = L -> Next;
    while(L != NULL){
        printf("%d ", L -> Data);
        L = L -> Next;
    }
    printf("\n");
}

/**
    将两个链表合为一个
    无论是L1 还是 L2 有多的数
    均添加到L1 ,然后让 表头指向 即可
*/

List Merge( List L1, List L2 ){
    List p, LL1, LL2;
    List Head = (List)malloc(sizeof(List));
    Head -> Next = NULL;
    p = Head;
    LL1 = L1 -> Next;
    LL2 = L2 -> Next;
    while(LL1 != NULL && LL2 != NULL){
        if(LL1 -> Data <= LL2 -> Data){
            p -> Next = LL1;
            LL1 = LL1 -> Next;
        }else{
            p -> Next = LL2;
            LL2 = LL2 -> Next;
        }
        p = p -> Next;
    }

    p -> Next = LL1 ? LL1 : LL2;
    //归零

    L1 -> Next = NULL;

    L2 -> Next = NULL;

    return Head;
}
int main()
{
    List L1, L2, L;
    L1 = Read();
    L2 = Read();
    L = Merge(L1, L2);
    Print(L);
    Print(L1);
    Print(L2);
    return 0;
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值