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

函数接口定义:

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;
 }  

最新文章

  1. 浏览器HTTP缓存原理分析
  2. SQLite Expert Professional 3查看SQLite数据
  3. VPN安装后报错:Reason442 &amp; Error56
  4. 有关vue的总结
  5. wampserver 2.5 首页链接问题,wampserver Your Projects
  6. Swift中的部分更新与旧版的区别
  7. BestCoder Round #87 1003 LCIS[序列DP]
  8. 微软职位内部推荐-Software Engineer II
  9. AIR 中的 File 对象 所访问的文件夹位置
  10. memcached缓存雪崩现象及解决办法
  11. DbHelperSQL和Dapper数据访问的性能对比
  12. 关于boost::function与boost::bind函数的使用心得
  13. VS下面的编译错误-----转换到 COFF 期间失败: 文件无效或损坏
  14. WINDOWS 2012忘记密码之后。。。
  15. Spring HTTP invoker 入门
  16. 使用EasyMock对Servlet进行简单的测试
  17. CMD(SA400 Command)
  18. MySQL 如何执行关联查询
  19. pyhton3.5将汉字转成二进制的方法
  20. saltstack自动化运维系列③之saltstack的常用模块使用

热门文章

  1. nsq
  2. Android应用内存泄漏的定位、分析与解决策略
  3. java 线程安全 synchronized
  4. CodeIgniter 开发,支付宝接口调用实例
  5. Xcode插件安装 错选了Skip Bundle解决办法
  6. java同一个类不同方法间的同步
  7. LeetCode &quot;Arranging Coins&quot;
  8. Hibernate反向工程生成DAO
  9. Bar菜单
  10. RMQ 训练 之 codevs 1690 开关灯 已经搞定