zoukankan      html  css  js  c++  java
  • 【线性结构】两个有序链表序列的合并

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

    函数接口定义:

    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

    注意点:

    L1、 L2、 L 三条链表都要求有头结点,所以分别从L1->Next,L2->Next开始比较节点,最后返回L 的头指针。

     1 List Merge(List L1,List L2) {
     2     List L = (List)malloc(sizeof(struct Node));
     3     L->Next=NULL;
     4     List s=L,s1=L1->Next, s2=L2->Next;
     5     while (s1&&s2) {
     6         if (s1->Data < s2->Data) {
     7             s->Next = s1;
     8             s1 = s1->Next;
     9         }
    10         else {
    11             s->Next = s2;
    12             s2 = s2->Next;
    13         }
    14         s = s->Next;
    15     }
    16     if (s1) {//如果s1还有剩余节点
    17         s->Next = s1;
    18         
    19     }
    20     if (s2) {
    21         s->Next = s2;
    22     }
    23     L1->Next = NULL;
    24     L2->Next = NULL;//只剩头结点
    25     //L = L->Next;
    26     return L;
    27 }
    作者:PennyXia
             
    本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
  • 相关阅读:
    kobject.c 添加注释
    DNS之四---实现DNS的转发功能
    DNS之三-----实现DNS的TCP/UDP功能及子域委派
    DNS之二---实现DNS主从复制
    第十二周----chrony时间同步与Cobbler+PXE自动化安装
    网络时间同步服务和chrony
    第十一周----黑客加入黑名单及将普通用户授权root权限
    第十周--IP监控任务脚本实现
    ELK之十三----kibana dashboard(仪表盘)使用
    vmware虚拟机下linux centos6.6只有lo,没有eth0网卡、随机分配ip地址,固定ip地址等问题
  • 原文地址:https://www.cnblogs.com/PennyXia/p/12484429.html
Copyright © 2011-2022 走看看