剑指Offer - 九度1519 - 合并两个排序的链表
剑指Offer - 九度1519 - 合并两个排序的链表
2013-11-30 22:04
- 题目描述:
-
输入两个单调递增的链表,输出两个链表合成后的链表,当然我们需要合成后的链表满足单调不减规则。
(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
题意分析:
合并链表,面试必考的题目。写的时候以下三个原则:
1. NULL一定要检查到位,否则会被鄙视
2. 合并链表要把原链表的节点拼成一条,而不是new出一堆新的节点,否则会被严重鄙视
3. 可以new出一个节点指向表头,这样能省点代码量。但对于频繁调用的函数,一次多余的new、delete都不应该有。
下面是ac的代码,当时写的时候貌似偷懒了...,第三条没做到。时间复杂度O(m + n),空间复杂度O(1)。
// 651961 zhuli19901106 1519 Accepted 点击此处查看所有case的执行结果 1024KB 1802B 230MS
//
#include <cstdio>
using namespace std; struct Node{
int val;
struct Node *next;
Node(int _val = ): val(_val), next(NULL){}
}; int main()
{
int n, m;
int i, tmp;
struct Node *h1, *h2, *h3;
struct Node *p1, *p2, *p3;
struct Node *r1, *r2, *r3; while(scanf("%d%d", &n, &m) == ){
if(n <= && m <= ){
printf("NULL\n");
continue;
}
r1 = new Node();
r2 = new Node();
r3 = new Node(); p1 = r1;
for(i = ; i < n; ++i){
scanf("%d", &tmp);
p1->next = new Node(tmp);
p1 = p1->next;
}
h1 = r1->next; p2 = r2;
for(i = ; i < m; ++i){
scanf("%d", &tmp);
p2->next = new Node(tmp);
p2 = p2->next;
}
h2 = r2->next; p3 = r3;
while(h1 != NULL && h2 != NULL){
if(h1->val < h2->val){
p1 = h1->next;
p3->next = h1;
p3 = p3->next;
p3->next = NULL;
h1 = p1;
}else{
p2 = h2->next;
p3->next = h2;
p3 = p3->next;
p3->next = NULL;
h2 = p2;
}
} while(h1 != NULL){
p1 = h1->next;
p3->next = h1;
p3 = p3->next;
p3->next = NULL;
h1 = p1;
} while(h2 != NULL){
p2 = h2->next;
p3->next = h2;
p3 = p3->next;
p3->next = NULL;
h2 = p2;
} h3 = r3->next;
printf("%d", h3->val);
p3 = h3->next;
while(p3 != NULL){
printf(" %d", p3->val);
p3 = p3->next;
}
printf("\n"); while(r3->next != NULL){
p3 = r3->next;
r3->next = p3->next;
delete p3;
} delete r1;
delete r2;
delete r3;
r1 = r2 = r3 = NULL;
} return ;
}
剑指Offer - 九度1519 - 合并两个排序的链表的更多相关文章
- 剑指offer十六之合并两个排序的链表
一.题目 输入两个单调递增的链表,输出两个链表合成后的链表,当然我们需要合成后的链表满足单调不减规则. 二.思路 注:链表1和链表2是两个递增排序的链表,合并这两个链表得到升序链表为链表3. 首先分析 ...
- 【剑指Offer】16、合并两个排序的链表
题目描述: 输入两个单调递增的链表,输出两个链表合成后的链表,当然我们需要合成后的链表满足单调不减规则. 解题思路: 首先需要判断几个特殊情况,即判断输入的两个指针是否为空.如果第一个 ...
- 剑指Offer:面试题17——合并两个排序的链表
题目描述 输入两个单调递增的链表,输出两个链表合成后的链表,当然我们需要合成后的链表满足单调不减规则. 思路1: 分别用p1,p2两个指针扫描两个有序链表,p3指针去构建新链表h3. p1.val & ...
- 剑指offer(16)合并两个排序的链表
题目描述 输入两个单调递增的链表,输出两个链表合成后的链表,当然我们需要合成后的链表满足单调不减规则. 题目分析 重点抓住这两个链表都是单挑递增的,因此我们只需要不断地比较他们的头结点就行,明显这是个 ...
- 剑指Offer - 九度1509 - 树中两个结点的最低公共祖先
剑指Offer - 九度1509 - 树中两个结点的最低公共祖先2014-02-07 01:04 题目描述: 给定一棵树,同时给出树中的两个结点,求它们的最低公共祖先. 输入: 输入可能包含多个测试样 ...
- 剑指Offer - 九度1512 - 用两个栈实现队列
剑指Offer - 九度1512 - 用两个栈实现队列2013-11-29 21:23 题目描述: 用两个栈来实现一个队列,完成队列的Push和Pop操作.队列中的元素为int类型. 输入: 每个输入 ...
- 剑指Offer - 九度1352 - 和为S的两个数字
剑指Offer - 九度1352 - 和为S的两个数字2014-02-05 18:15 题目描述: 输入一个递增排序的数组和一个数字S,在数组中查找两个数,是的他们的和正好是S,如果有多对数字的和等于 ...
- 剑指Offer - 九度1505 - 两个链表的第一个公共结点
剑指Offer - 九度1505 - 两个链表的第一个公共结点2013-11-24 20:09 题目描述: 输入两个链表,找出它们的第一个公共结点. 输入: 输入可能包含多个测试样例.对于每个测试案例 ...
- 剑指Offer - 九度1348 - 数组中的逆序对
剑指Offer - 九度1348 - 数组中的逆序对2014-01-30 23:19 题目描述: 在数组中的两个数字,如果前面一个数字大于后面的数字,则这两个数字组成一个逆序对.输入一个数组,求出这个 ...
随机推荐
- Sublime Text 3预览Markdown
Sublime Text 3预览Markdown 安装控制器 按下按下ctrl+`出现小控制台 输入import urllib.request,os; pf = 'Package Control.su ...
- 网页打开速度优化——HTTP请求头及响应头
no-cache:不缓存过期的资源 no-store:不缓存 最近看了<图解HTTP>这本书,书上讲到了这两者的区别: no-cache从字面意义上很容易误解为不缓存,但是no-cache ...
- AJAX(四):XHR2支持的方法
XMLHttpRequest 1级只是把已有的XHR对象的实现细节描述了出来.而XMLHttpRequest 2级则进一步发展了XHR FormDataFormData为序列化表单以及创建与表单格式相 ...
- BZOJ 3235: [Ahoi2013]好方的蛇
BZOJ 3235: [Ahoi2013]好方的蛇 标签(空格分隔): OI-BZOJ OI-DP OI-容斥原理 Time Limit: 10 Sec Memory Limit: 64 MB Des ...
- border-radius给元素加圆角边框
border-radius给元素加圆角边框 例: border-radius:20px; /*所有角都使用半径为20px的圆角*/ 实心圆: 把宽度(width)与高度(height)值设置为一致(也 ...
- Java中阻塞队列的使用
http://blog.csdn.net/qq_35101189/article/details/56008342 在新增的Concurrent包中,BlockingQueue很好的解决了多线程中,如 ...
- 编写第一个OpenACC程序
原文链接 在PGI的官方网站上获得示例代码: http://www.pgroup.com/lit/samples/pgi_accelerator_examples.tar 我们的第一个例子从一个简单的 ...
- centos install rtl8188ce driver
1.导入公钥,注意大小写. rpm --import http://elrepo.org/RPM-GPG-KEY-elrepo.org 2.安装ELRepo库. rpm -Uvh http://elr ...
- IE 8 下小心使用console.log()
我们很多情况下会使用console.log() 对代码调试.在chrome下和Firefox下都不会有太大问题,但是在最近我在IE8 下调试时使用了console.log(),就出现一些问题.在IE8 ...
- 手动安装Apache+PHP+MYSQL及环境配置
先准备好软件: Apache官方下载地址:apache_2.0.55-win32-x86-no_ssl.msi,更多版本在这里: php官方下载地址:php-5.0.5-Win32.zip,更多镜像下 ...