【剑指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 题目描述: 输入一个复杂链表(每个节点中有节点值,以及两个指针,一个指向下一个节点,另一个特殊指针指向任意一个节点 ...
随机推荐
- [ Luogu 4917 ] 天守阁的地板
\(\\\) \(Description\) 定义二元函数\(F(x,y)\)表示,用 \(x\times y\) 的矩形不可旋转的铺成一个任意边长的正方形,所需要的最少的矩形个数. 现在\(T\)组 ...
- 联想 S5 Pro(L78041)免解锁BL 免rec 保留数据 ROOT Magisk Xposed 救砖 ZUI 5.0.123
>>>重点介绍<<< 第一:本刷机包可卡刷可线刷,刷机包比较大的原因是采用同时兼容卡刷和线刷的格式,所以比较大第二:[卡刷方法]卡刷不要解压刷机包,直接传入手机后用 ...
- NodeJS、NPM安装配置步骤
安装NodeJS和NPM 1.Node JS 官网下载地址 https://nodejs.org/en/download/ 2.安装完后,使用cmd 命令输入两个命令,查看安装状态 node -v n ...
- dbcp数据源配置
<bean id="dbcpDataSource" class="org.apache.commons.dbcp.BasicDataSource" de ...
- grunt 全局使用
grunt 不同地方使用时需要将插件下载的当前文件夹,这是因为查找模块时是当前路径,这会造成多个工程使用时会需要下载多次,而这些东西又不应该存在于工程之中,所以应该将所有模块全局安装,然后在工程下面只 ...
- 6.15 分解IP地址
问题:将一个IP地址字段分解到列中,考虑下面列出的IP地址: 111.22.3.4 要得到如下所示的查询结果: +-----+----+---+---+| a | b | c | d |+--- ...
- bazel和TensorFlow安装
bazel安装:https://docs.bazel.build/versions/master/install-ubuntu.html#install-with-installer-ubuntu 安 ...
- git 的 基础操作及使用
/* git svn版本控制器 */ /*git把文件对应的储存空间分为三个区: 1.工作区 2.缓存区 3.历史区 直接操作文件,不做add时,咱们是在工作区做的修改 右键 git bash her ...
- webpack3 + vue 添加 serviceWorker
新的vue脚手架已经可以自带pwa了,本文主要针对旧版的webpack. 先装三个插件: $npm i register-service-worker sw-precache-webpack-plug ...
- 运行/调试你的PHP代码
前言 没有任何一名程序员可以一气呵成.完美无缺的在不用调试的情况下完成一个功能或模块.调试实际分很多种情况.本篇文章我分享下自己在实际开发工作中的经验,我个人理解,调试分三种,注意我所讲的是调试并非测 ...