02-线性结构1 两个有序链表序列的合并 (15分)
来源:互联网 发布:win10制作mac安装u盘 编辑:程序博客网 时间:2024/04/30 04:54
本题要求实现一个函数,将两个链表表示的递增整数序列合并为一个递增的整数序列。
函数接口定义:
List Merge( List L1, List L2 );
其中List结构定义如下:
typedef struct Node *PtrToNode;
struct Node {
ElementType Data; /* 存储结点数据 */
PtrToNode Next; /* 指向下一个结点的指针 */
};
typedef PtrToNode List; /* 定义单链表类型 */
L1和L2是给定的带头结点的单链表,其结点存储的数据是递增有序的;函数Merge要将L1和L2合并为一个递增的整数序列。应直接使用原序列中的结点,返回归并后的链表头指针。
裁判测试程序样例:
#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
#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;}List Merge( List L1, List L2 ){ List r; //建立头结点而不能使用L1或L2的头结点是因为后边要将L1,L2置为NULL PtrToNode L = ( PtrToNode )malloc( sizeof( struct Node ) ); List p=L1->Next; List q=L2->Next; r=L; L->Next=NULL; while(p!=NULL&&q!=NULL){ if(p->Data<q->Data){ r->Next=p; p=p->Next; r=r->Next; } else{ r->Next=q; q=q->Next; r=r->Next; } } r->Next=NULL; if(p!=NULL) r->Next=p; if(q!=NULL) r->Next=q; L1->Next=NULL; L2->Next=NULL; return L;}List Read() { int len = 0; int num = 0; PtrToNode h = NULL; PtrToNode last = NULL; scanf( "%d",&len ); if( len == 0 ) return NULL; h = ( PtrToNode )malloc( sizeof( struct Node ) );//建立头结点 h->Next = NULL; last = h; while( len ){ scanf( "%d",&num ); PtrToNode node = ( PtrToNode )malloc( sizeof( struct Node ) ); node->Data = num; node->Next = NULL; last->Next = node; last = node; len--; } return h;} void Print( List L ) { if(L->Next==NULL){ printf("NULL\n"); return; } L=L->Next; while(L!=NULL){ printf("%d ",L->Data); L=L->Next; } putchar('\n'); }
4 0
- 02-线性结构1 两个有序链表序列的合并 (15分)
- 02-线性结构1 两个有序链表序列的合并 (15分)
- 02-线性结构1 两个有序链表序列的合并 (15分)
- PTA 02-线性结构1 两个有序链表序列的合并 (15分)
- 02-线性结构1 两个有序链表序列的合并 (15分)
- 02-线性结构1 两个有序链表序列的合并 (15分)
- 02-线性结构1 两个有序链表序列的合并 (15分)
- 02-线性结构1 两个有序链表序列的合并 (15分)
- 02-线性结构1 两个有序链表序列的合并 (15分)
- 02-线性结构1 两个有序链表序列的合并 (15分)
- 02-线性结构1 两个有序链表序列的合并(15 分)
- 02-线性结构1 两个有序链表序列的合并(15 分)
- 02-线性结构1 两个有序链表序列的合并(15 分)
- 02-线性结构1 两个有序链表序列的合并(15 分)
- PAT数据结构_02-线性结构1 两个有序链表序列的合并 (15分)
- [PTA] 线性结构1 两个有序链表序列的合并(15 分)
- 02-线性结构1 两个有序链表序列的合并 (15分) (单向链表)
- 02-线性结构1 两个有序链表序列的合并 (15分)
- Android_android studio使用 9patch常见问题解决
- OpenGL立方体
- CentOS下网卡启动、配置等ifcfg-eth0教程
- 百度地图反地理编码问题总结(swift)
- mysql连接查询中索引的重要性
- 02-线性结构1 两个有序链表序列的合并 (15分)
- java快速开发平台zcurd
- Spring-Java配置文件远程连接mongdb数据库
- PHP curl 的CURLOPT_POSTFIELDS之数组和字符串之谜
- vs项目中头文件(.h)静态库(.lib)和 动态库(.dll )的路径和配置问题
- python进行桌面程序开发(GUI),开发环境搭建
- 追着嘟嘟学c#系列基础第三篇-----c#访问修饰符【蓝鸥出品】
- Game of Life
- Git 操作