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

函数接口定义:

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

=============================================第一次code:
 #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);
     ;
 }
 List Read()
 {
     int i,n;
     scanf("%d",&n);
     List p,q,L;
     L=(List)malloc(sizeof(PtrToNode));
     L->Next=NULL;//建立头结点
     q=L;
     ;i<=n;i++)
     {
         p=(List)malloc(sizeof(PtrToNode));
         scanf("%d",&p->Data);
         q->Next=p;
         q=q->Next;//q后移
     }
     p->Next=NULL;//最后一个节点是尾结点
     return L;
 }
 void Print( List L)
 {
     List p=L->Next;//指向第一个结点
     if(p==NULL)
     {
         printf("NULL");
         printf("\n");
         return;
     }
     while(p)
     {
       printf("%d ",p->Data);
       p=p->Next;
     }
     printf("\n");
 }
 List Merge( List L1, List L2)
 {
     List L, p1, p2,tail;
     L=(List)malloc(sizeof(PtrToNode));
     p1=L1->Next;
     p2=L2->Next;
     tail=L;
     while(p1 && p2)
     {
         if(p1->Data < p2->Data)//链上data值小的
         {
             tail->Next=p1;
             tail=p1;
             p1=p1->Next;
             L1->Next=NULL;
             L2->Next=NULL;
         }
         else
         {
             tail->Next=p2;
             tail=p2;
             p2=p2->Next;
             L1->Next=NULL;
             L2->Next=NULL;
         }
     }
     if(p1)
     {
         tail->Next=p1;
     }
     else
     {
         tail->Next=p2;
     }
     return L;
 }  

PAT 02-线性结构1 两个有序链表序列的合并 (15分)的更多相关文章

  1. 02-线性结构1 两个有序链表序列的合并(15 point(s)) 【链表合并】

    02-线性结构1 两个有序链表序列的合并(15 point(s)) 本题要求实现一个函数,将两个链表表示的递增整数序列合并为一个非递减的整数序列. 函数接口定义: List Merge( List L ...

  2. [刷题] PTA 02-线性结构1 两个有序链表序列的合并

    程序: 1 #include <stdio.h> 2 #include <stdlib.h> 3 4 typedef int ElementType; 5 typedef st ...

  3. PTA 两个有序链表序列的合并

    6-5 两个有序链表序列的合并 (15 分)   本题要求实现一个函数,将两个链表表示的递增整数序列合并为一个非递减的整数序列. 函数接口定义: List Merge( List L1, List L ...

  4. 浙江大学PAT上机题解析之2-11. 两个有序链表序列的合并

    已知两个非降序链表序列S1与S2,设计函数构造出S1与S2的并集新非降序链表S3. 输入格式说明: 输入分2行,分别在每行给出由若干个正整数构成的非降序序列,用-1表示序列的结尾(-1不属于这个序列) ...

  5. 【LeetCode题解】21_合并两个有序链表

    目录 21_合并两个有序链表 描述 解法一:迭代 思路 Java 实现 Python 实现 解法二:递归 思路 Java 实现 Python 实现 21_合并两个有序链表 描述 将两个有序链表合并为一 ...

  6. LeetCode初级算法--链表02:合并两个有序链表

    LeetCode初级算法--链表02:合并两个有序链表 搜索微信公众号:'AI-ming3526'或者'计算机视觉这件小事' 获取更多算法.机器学习干货 csdn:https://blog.csdn. ...

  7. Leetcode题目21.合并两个有序链表(简单)

    题目描述: 将两个有序链表合并为一个新的有序链表并返回.新链表是通过拼接给定的两个链表的所有节点组成的. 示例: 输入:1->2->4, 1->3->4输出:1->1-& ...

  8. [LeetCode] 21. 合并两个有序链表

    题目链接:https://leetcode-cn.com/problems/merge-two-sorted-lists/ 题目描述: 将两个有序链表合并为一个新的有序链表并返回.新链表是通过拼接给定 ...

  9. [Swift]LeetCode21. 合并两个有序链表 | Merge Two Sorted Lists

    Merge two sorted linked lists and return it as a new list. The new list should be made by splicing t ...

随机推荐

  1. C#中dynamic的正确用法

    C#中dynamic的正确用法  http://www.cnblogs.com/qiuweiguo/archive/2011/08/03/2125982.html dynamic是FrameWork4 ...

  2. mybatis 与 日志

    如上图所示,mybatis默认支持7种日志记录的方式,也可以自己实现Log接口,然后将实现类通过LogFactory注入到日志工厂中. LogFactory是日志模块的入口,外层通过getLog获取L ...

  3. LINQ、Lambda 的转换

    var d = from d1 in pDT1.AsEnumerable() from d2 in pDT2.AsEnumerable() where d1.Field<string>(& ...

  4. 如何用Matplotlib绘制三元函数

    #!/usr/bin/env python #coding=GBK from mpl_toolkits.mplot3d import Axes3D from matplotlib import cm ...

  5. vmware安装无法打开内核设备 \\.\Global\vmx86: 系统找不到指定的文件

    刚刚安装好了虚拟机,Windows XP 64bit Professional,安装好了开发环境,然后重启机器后虚拟机就打不开了,提示“vmware安装无法打开内核设备 \\.\Global\vmx8 ...

  6. linux使用secureCRT连接(没有rsa的时候)

    一台linux新机器,怎么使用secureCRT连接呢??? 首先  vim   /etc/sysconfig/network-scripts/ifcfg-eth0 把BOOTPROTO=none I ...

  7. Oracle补习班第四天

    Everything has its time and that time must be watched. 万物皆有时,时来不可失 1,管理参数文件 参数文件分两种spfile二进制文件和pfile ...

  8. 在UIView上添加tableView设置代理属性

  9. loadrunner中web_reg_find使用使用方法

    Java语法:int object.reg_find( String text, String[] argumentList ); (例子:略) C语法:int web_reg_find( const ...

  10. Disruptor 极速体验

    已经不记得最早接触到 Disruptor 是什么时候了,只记得发现它的时候它是以具有闪电般的速度被介绍的.于是在脑子里, Disruptor 和"闪电"一词关联了起来,然而却一直没 ...