【剑指offer】合并两有序单链表
转载请注明出处:http://blog.csdn.net/ns_code/article/details/25739727
九度OJ上AC,採用归并的思想递归实现。
- 题目描写叙述:
-
输入两个单调递增的链表,输出两个链表合成后的链表,当然我们须要合成后的链表满足单调不减规则。
(hint: 请务必使用链表。)
- 输入:
-
输入可能包括多个測试例子,输入以EOF结束。
对于每一个測试案例,输入的第一行为两个整数n和m(0<=n<=1000, 0<=m<=1000):n代表将要输入的第一个链表的元素的个数,m代表将要输入的第二个链表的元素的个数。
以下一行包括n个数t(1<=t<=1000000):代表链表一中的元素。接下来一行包括m个元素,s(1<=t<=1000000)。
- 输出:
-
相应每一个測试案例,
若有结果,输出相应的链表。否则,输出NULL。
- 例子输入:
-
5 2
1 3 5 7 9
2 4
0 0
- 例子输出:
-
1 2 3 4 5 7 9
NULL
AC代码:
#include<stdio.h>
#include<stdlib.h> typedef int ElemType; typedef struct Node
{
ElemType data;
struct Node *next;
}Node,*pNode; /*
合并两个升序链表,合并后的链表依旧升序排列
*/
pNode MergeList(pNode pHead1,pNode pHead2)
{
if(pHead1 == NULL)
return pHead2;
if(pHead2 == NULL)
return pHead1; pNode pMergeHead = NULL;
if(pHead1->data > pHead2->data)
{
pMergeHead = pHead2;
pMergeHead->next = MergeList(pHead1,pHead2->next);
}
else
{
pMergeHead = pHead1;
pMergeHead->next = MergeList(pHead2,pHead1->next);
}
return pMergeHead;
} int main()
{
int n,m;
while(scanf("%d %d",&n,&m) != EOF)
{
pNode pHead1 = NULL;
if(n > 0)
{
int i,data;
scanf("%d",&data);
pHead1 =(pNode)malloc(sizeof(Node));
if(pHead1 == NULL)
exit(EXIT_FAILURE);
pHead1->data = data;
pHead1->next = NULL; pNode pCur = pHead1;
for(i=0;i<n-1;i++)
{
scanf("%d",&data);
pNode pNew =(pNode)malloc(sizeof(Node));
if(pNew == NULL)
exit(EXIT_FAILURE);
pNew->data = data;
pNew->next = NULL;
pCur->next = pNew;
pCur = pCur->next;
}
} pNode pHead2 = NULL;
if(m > 0)
{
int i,data;
scanf("%d",&data);
pHead2 =(pNode)malloc(sizeof(Node));
if(pHead2 == NULL)
exit(EXIT_FAILURE);
pHead2->data = data;
pHead2->next = NULL; pNode pCur = pHead2;
for(i=0;i<m-1;i++)
{
scanf("%d",&data);
pNode pNew =(pNode)malloc(sizeof(Node));
if(pNew == NULL)
exit(EXIT_FAILURE);
pNew->data = data;
pNew->next = NULL;
pCur->next = pNew;
pCur = pCur->next;
}
} pNode pMergeHead = MergeList(pHead1,pHead2);
if(pMergeHead == NULL)
printf("NULL\n");
else
{
pNode pCur = pMergeHead;
while(pCur != NULL)
{
//这里主要时要注意输出的格式
if(pCur->next == NULL)
printf("%d\n",pCur->data);
else
printf("%d ",pCur->data);
pCur = pCur->next;
}
}
}
return 0;
}
/************************************************************** Problem: 1519 User: mmc_maodun Language: C Result: Accepted Time:250 ms Memory:4080 kb****************************************************************/【剑指offer】合并两有序单链表的更多相关文章
- 剑指OFFER——合并两个有序的链表
输入两个单调递增的链表,输出两个链表合成后的链表,当然我们需要合成后的链表满足单调不减规则. 再做这道题就是想不起来书上怎么做的了,但是最近看STL里面全是这种基础的合并啊,比较啊.就算不会也看会了. ...
- 剑指Offer——合并两个排序的链表
题目描述: 输入两个单调递增的链表,输出两个链表合成后的链表,当然我们需要合成后的链表满足单调不减规则. 分析: 苦力活,使用两个指针分别指向未被合并的两个链表的首部,比较两个首部数值的大小,合并数值 ...
- python剑指offer 合并两个排序的链表
题目描述 输入两个单调递增的链表,输出两个链表合成后的链表,当然我们需要合成后的链表满足单调不减规则. # -*- coding:utf-8 -*- # class ListNode: # def _ ...
- 剑指Offer 合并两个排序的链表
题目描述 输入两个单调递增的链表,输出两个链表合成后的链表,当然我们需要合成后的链表满足单调不减规则. 思路: 用2个新节点,一个用来存放新链表的头节点,另一个用来移动.当p1,p2有一个到尾部的 ...
- 剑指offer——合并两个排序的链表——对象、引用和赋值初接触
题目描述:输入两个单调递增的链表,输出两个链表合成后的链表,当然,我们需要合成后的链表满足单调不减规则. 先公布结果: /* public class ListNode { int val; List ...
- 用js刷剑指offer(合并两个排序的链表)
题目描述 输入两个单调递增的链表,输出两个链表合成后的链表,当然我们需要合成后的链表满足单调不减规则. 牛客网链接 js代码 /*function ListNode(x){ this.val = x; ...
- 剑指 Offer 52. 两个链表的第一个公共节点 + 链表 + 第一个公共结点 + 双指针
剑指 Offer 52. 两个链表的第一个公共节点 Offer_52 题目详情 题解分析 可以使用两个指针 node1,node2 分别指向两个链表 headA,headB 的头结点,然后同时分别逐结 ...
- 力扣 - 剑指 Offer 52. 两个链表的第一个公共节点
题目 剑指 Offer 52. 两个链表的第一个公共节点 思路1(栈) 若两个链表相遇,则从它开始相遇的地方到链表末尾应该都是相同的,那么我们可以将两个链表分别放入两个栈中,然后依次循环比较两个栈顶的 ...
- 剑指Offer - 九度1524 - 复杂链表的复制
剑指Offer - 九度1524 - 复杂链表的复制2014-02-07 01:30 题目描述: 输入一个复杂链表(每个节点中有节点值,以及两个指针,一个指向下一个节点,另一个特殊指针指向任意一个节点 ...
随机推荐
- ADPU 大全
APDU协议 APDU协议,即是智能卡与读写器间的应用层协议,在ISO7816-4[7]中定义了该协议的结构格式.APDU数据有两种结构,读写器使用的APDU结构为命令APDU,C-APDU(Comm ...
- Python学习笔记之默认参数
函数定义时 参数定义的顺序必须是:必选参数.默认参数.可变参数和关键字参数. def test(a,b,c=1,*d,**e) pass
- C++学习笔记(一)之指针
指向指针的引用 ; int * p; int *&r = p; //r为对指针p的引用 r = &i; //r为对p的引用,故对r赋值即将p指向i *r = ; //更新i的值 通过* ...
- C++(变量类型-深入)
变量类型 变量其实只不过是程序可操作的存储区的名称.C++ 中每个变量都有指定的类型,类型决定了变量存储的大小和布局,该范围内的值都可以存储在内存中,运算符可应用于变量上. 变量的名称可以由字母.数字 ...
- iOS设计模式——Category和 Extension
什么是Category Category模式用于向已经存在的类添加方法从而达到扩展已有类的目的,在很多情形下Category也是比创建子类更优的选择.新添加的方法同样也会被被扩展的类的所有子类自动继承 ...
- 服务器主机&软件性能测试自定标准
PS:最近一直致力于代理ip的服务搭建,其中就要根据客户群体的不同来测试搭建环境和搭建软件的性能,但是不同的客户群体所处的环境和使用的软件是不同的,而业内又没有一套完整的评估方法.在忽略网络本身来讲, ...
- 使用lombok注解@Getter @Setter方法代码编译成功,但是没有生成get,set方法
现象描述: 在对应类对象中,添加lombok的@Getter或@Setter注解,编译没有问题,但是在使用类对象时,没有出现对应的get或set方法. 配置且编译ok,但是没有对应的get或set方法 ...
- docker 转载
写的非常好的一篇文章,不知道为什么被删除了. 利用Google快照,做个存档. 快照地址:地址 作者地址:青牛 什么是docker Docker 是一个开源项目,诞生于 2013 年初,最初是 do ...
- Java笔记——String、StringBuffer和StringBuilder类
String类是不可变类,即一旦一个String对象被创建以后,包含在这个对象中的字符串序列是不可改变的,直至这个对象被销毁. StringBuffer对象则代表一个字符序列可变的字符串,当一个S ...
- Iframe用法精析
String.prototype.match()中正则表达式的g标识存在的时候,函数不会捕获子表达式中的内容,不存在的时候可以. RegExp.prototype.exec()中g的存在只会影响,Re ...