• 02-线性结构1 两个有序链表序列的合并


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

    • 编译器:gcc

    • 时间限制:400ms
    • 内存限制:64MB
    • 代码长度限制:16kB
    • 判题程序:系统默认
    • 作者:DS课程组
    • 单位:浙江大学

    https://pta.patest.cn/pta/test/3512/exam/3/question/62612

    本题要求实现一个函数,将两个链表表示的递增整数序列合并为一个非递减的整数序列。

    函数接口定义:

    List Merge( List L1, List L2 );
    

    其中List结构定义如下:

    typedef struct Node *PtrToNode;
    struct Node {
        ElementType Data; /* 存储结点数据 */
        PtrToNode   Next; /* 指向下一个结点的指针 */
    };
    typedef PtrToNode List; /* 定义单链表类型 */
    

    L1L2是给定的带头结点的单链表,其结点存储的数据是递增有序的;函数Merge要将L1L2合并为一个非递减的整数序列。应直接使用原序列中的结点,返回归并后的链表头指针。

    裁判测试程序样例:

    #include <stdio.h>
    #include <stdlib.h>
    
    typedef int ElementType;
    typedef struct Node *PtrToNode;
    struct Node {
        ElementType Data;
        PtrToNode   Next;
    };
    typedef PtrToNode List;
    
    List Read(); /* 细节在此不表 */
    void Print( List L ); /* 细节在此不表;空链表将输出NULL */
    
    List Merge( List L1, List L2 );
    
    int main()
    {
        List L1, L2, L;
        L1 = Read();
        L2 = Read();
        L = Merge(L1, L2);
        Print(L);
        Print(L1);
        Print(L2);
        return 0;
    }
    
    /* 你的代码将被嵌在这里 */
    

    输入样例:

    3
    1 3 5
    5
    2 4 6 8 10
    

    输出样例:

    1 2 3 4 5 6 8 10 
    NULL
    NULL

     1 #include <stdio.h>
     2 #include <stdlib.h>
     3 
     4 typedef int ElementType;
     5 typedef struct Node *PtrToNode;
     6 struct Node {
     7     ElementType Data;
     8     PtrToNode   Next;
     9 };
    10 typedef PtrToNode List;
    11 
    12 List Read(); /* 细节在此不表 */
    13 void Print( List L ); /* 细节在此不表;空链表将输出NULL */
    14 
    15 List Merge( List L1, List L2 );
    16 
    17 int main()
    18 {
    19     List L1, L2, L;
    20     L1 = Read();
    21     L2 = Read();
    22     L = Merge(L1, L2);
    23     Print(L);
    24     Print(L1);
    25     Print(L2);
    26 
    27     return 0;
    28 }
    29 List Merge(List L1,List L2)
    30 {
    31     if(!L1&&!L2)
    32         return NULL;
    33     List L=(List)malloc(sizeof(struct Node));
    34     List p1=L1->Next,p2=L2->Next,p=L;
    35     while(p1&&p2)
    36     {
    37         int t=p1->Data-p2->Data;
    38         if(t>=0)
    39         {
    40             p->Next=p2;
    41             p2=p2->Next;
    42         }
    43         else
    44         {
    45             p->Next=p1;
    46             p1=p1->Next;
    47         }
    48         p=p->Next;
    49     }
    50     if(p1) p->Next=p1;
    51     else if(p2) p->Next=p2;
    52     L1->Next=NULL;
    53     L2->Next=NULL;
    54     return L;
    55 }
    56 List Read()
    57 {
    58   int len = 0;
    59   int num = 0;
    60   List h = NULL;
    61   List last = NULL;
    62 
    63   scanf( "%d",&len );
    64   if(  len == 0  )
    65     return NULL;
    66 
    67   h = ( List )malloc( sizeof( struct Node ) );//建立头结点
    68   h->Next = NULL;
    69   last = h;
    70   while(  len ){
    71     scanf( "%d",&num );
    72     List node = ( List )malloc( sizeof( struct Node ) );
    73     node->Data = num;
    74     node->Next = NULL;
    75     last->Next = node;
    76     last = node;
    77     len--;
    78   }
    79   return h;
    80 }
    81 void Print( List L )
    82 {
    83     if(L->Next==NULL){
    84       printf("NULL
    ");
    85         return;
    86     }
    87     L=L->Next;
    88     while(L!=NULL){
    89         printf("%d ",L->Data);
    90         L=L->Next;
    91     }
    92     putchar('
    ');
    93 }
  • 相关阅读:
    header
    panel----单个基础版
    vue-demo
    js不同类型变量比较
    reset.css
    关于各个浏览器的兼容问题
    git
    AMD与CMD区别
    喜欢前端的看过来哦
    js中数组去重的几种方法
  • 原文地址:https://www.cnblogs.com/Fresh--air/p/6701060.html
Copyright © 2020-2023  润新知