PAT 2-11 两个有序链表序列的合并(C语言实现)
来源:互联网 发布:中信银行客户端软件 编辑:程序博客网 时间:2024/05/14 07:05
题目描述:
已知两个非降序链表序列S1与S2,设计函数构造出S1与S2的并集新非降序链表S3。
输入格式说明:
输入分2行,分别在每行给出由若干个正整数构成的非降序序列,用-1表示序列的结尾(-1不属于这个序列)。数字用空格间隔。
输出格式说明:
在一行中输出合并后新的非降序链表,数字间用空格分开,结尾不能有多余空格;若新链表为空,输出“NULL”。
样例输入与输出:
序号输入输出11 3 5 -12 4 6 8 10 -1
1 2 3 4 5 6 8 102
1 2 3 4 5 -11 2 3 4 5 -1
1 1 2 2 3 3 4 4 5 53
-1-1
NULL
依次扫描两个链表,将元素值较小的那个链表指针往后移,并将较小元素值放进第三个链表中。当其中一个链表扫描完时,将另一个非空链表剩余的值直接复制到新链表中。
源码:
#include<stdio.h>typedef struct node *ptrNode;typedef ptrNode LinkList; //头结点typedef ptrNode Position;//中间节点typedef int ElementType;struct node{ElementType Element;Position next;};int IsEmpty(LinkList L){return L->next == NULL;}LinkList creatList(void) {LinkList head,r,p;int x;head = (struct node*)malloc(sizeof(struct node)); //生成新结点r = head;scanf("%d",&x);while(x != -1){p = (struct node*)malloc(sizeof(struct node));p->Element = x;r->next = p;r = p;scanf("%d",&x);}r->next = NULL;return head;}LinkList mergeList(LinkList a, LinkList b){Position ha, hb,hc;LinkList c,r,p;ha = a->next;hb = b->next;c = (struct node*)malloc(sizeof(struct node));r = c;while((ha != NULL)&&(hb != NULL)){p = (struct node*)malloc(sizeof(struct node));if(ha->Element <= hb->Element){p->Element = ha->Element;ha = ha->next;}else{p->Element = hb->Element;hb = hb->next;}r->next = p;r = p;}if(ha == NULL){while(hb != NULL){p = (struct node*)malloc(sizeof(struct node));p->Element = hb->Element;hb = hb->next;r->next = p; r = p;}}if(hb == NULL){while(ha != NULL){p = (struct node*)malloc(sizeof(struct node));p->Element = ha->Element;ha = ha->next;r->next = p; r = p;}}r->next = NULL;return c;}void printList(LinkList L){LinkList hc;int flag = 0;hc = L->next;if(hc == NULL)printf("NULL");while(hc != NULL){if(flag)printf(" ");elseflag = 1;printf("%d",hc->Element);hc = hc->next;}}int main(void){LinkList L1,L2,L3;L1 = creatList();L2 = creatList();L3 = mergeList(L1,L2);printList(L3);return 0;}
0 0
- PAT 2-11 两个有序链表序列的合并(C语言实现)
- PAT 2-12 两个有序链表序列的交集(C语言实现)
- PAT:两个有序链表序列的合并(Java实现)
- PAT 2-13 两个有序序列的中位数(C语言实现)
- 浙大PAT 2-11. 两个有序链表序列的合并 (解题思路)
- pat(A)2-11. 两个有序链表序列的合并
- PAT 两个有序链表序列的合并
- 两个有序链表序列的合并 PAT
- 浙江大学PAT上机题解析之2-11. 两个有序链表序列的合并
- 将两个递增的有序链表合并为一个递增的有序链表(C语言编程实现)
- 【C】两个有序链表序列的合并
- 两个有序链表序列的合并
- 两个有序链表序列的合并
- 两个有序链表序列的合并
- 两个有序链表序列的合并
- 两个有序链表序列的合并
- 两个有序链表序列的合并
- 两个有序链表序列的合并
- Bull Math(java大数相乘)
- FEDERATED存储引擎的使用,如何开启FEDERATED,FEDERATED Support NO?
- 学习了这么久,资料整理了一大堆,马上毕业了,开始写写博客,以后慢慢看。。
- Binary Tree Inorder Traversal
- 一.贪心算法 喷水装置(一)
- PAT 2-11 两个有序链表序列的合并(C语言实现)
- 基于c#的两种最小凸包的生成(三硬币法与串行算法)
- 一个牛人给java初学者的建议,文章写得很好,发给大家看看
- webBrowser强制在本窗口打开,禁止在新窗口打开
- C++中priority_queue的比较函数重载的两种方式
- 数据持久层框架
- iOS音频播放 (五):AudioQueue 转
- stat---strftime这两个函数
- objc 类型转换