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

来源:互联网 发布:淘宝联盟找不到商品 编辑:程序博客网 时间:2024/04/30 03:01

题目: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 0