(剑指Offer)面试题17:合并两个排序的链表
题目:
输入两个递增排序的链表,合并这两个链表并使新链表中的结点仍然时按照递增排序的。
链表结点定义如下:
struct ListNode{
int val;
ListNode* next;
};
思路:
合并两个递增排序的链表,思想类似于归并排序的merge过程。
1、当两个链表均不为空,
如果链表1头结点的值小于链表2头结点的值,那么链表1的头结点作为新链表的头结点,否则链表2的头结点作为新链表的头结点,链表指针往前走一步;
对两个链表中剩余结点的操作同步骤1一样;(这是一个递归的过程)
2、当两个链表至少有一个为空,
新链表指针指向非空的那一个;
代码:
struct ListNode{
int val;
ListNode* next;
};
// recursive method
ListNode* Merge_1(ListNode* pHead1, ListNode* pHead2){
if(pHead1==NULL)
return pHead2;
if(pHead2==NULL)
return pHead1;
if(pHead1->val<pHead2->val){
pHead1->next=Merge_1(pHead1->next,pHead2);
return pHead1;
}
else{
pHead2->next=Merge_1(pHead1,pHead2->next);
return pHead2;
}
}
// non-recursive method
ListNode* Merge_2(ListNode* pHead1, ListNode* pHead2){
ListNode *p=new ListNode();
ListNode *MergeHead=p;
while(pHead1!=NULL && pHead2!=NULL){
if(pHead1->val<pHead2->val){
MergeHead->next=pHead1;
pHead1=pHead1->next;
}
else{
MergeHead->next=pHead2;
pHead2=pHead2->next;
}
MergeHead=MergeHead->next;
}
if(pHead1==NULL)
MergeHead->next=pHead2;
if(pHead2==NULL)
MergeHead->next=pHead1;
return p->next;
}
在线测试OJ:
http://www.nowcoder.com/books/coding-interviews/d8b6b4358f774294a89de2a6ac4d9337?rp=1
AC代码:
class Solution {
public:
ListNode* Merge(ListNode* pHead1, ListNode* pHead2)
{
if(pHead1==NULL)
return pHead2;
if(pHead2==NULL)
return pHead1;
if(pHead1->val<pHead2->val){
pHead1->next=Merge(pHead1->next,pHead2);
return pHead1;
}
else{
pHead2->next=Merge(pHead1,pHead2->next);
return pHead2;
}
}
};
class Solution {
public:
ListNode* Merge(ListNode* pHead1, ListNode* pHead2)
{
ListNode *p=new ListNode(0);
ListNode *MergeHead=p;
while(pHead1!=NULL && pHead2!=NULL){
if(pHead1->val<pHead2->val){
MergeHead->next=pHead1;
pHead1=pHead1->next;
}
else{
MergeHead->next=pHead2;
pHead2=pHead2->next;
}
MergeHead=MergeHead->next;
}
if(pHead1==NULL)
MergeHead->next=pHead2;
if(pHead2==NULL)
MergeHead->next=pHead1;
return p->next;
}
};
(剑指Offer)面试题17:合并两个排序的链表的更多相关文章
- 剑指Offer:面试题17——合并两个排序的链表
题目描述 输入两个单调递增的链表,输出两个链表合成后的链表,当然我们需要合成后的链表满足单调不减规则. 思路1: 分别用p1,p2两个指针扫描两个有序链表,p3指针去构建新链表h3. p1.val & ...
- 剑指Offer - 九度1519 - 合并两个排序的链表
剑指Offer - 九度1519 - 合并两个排序的链表2013-11-30 22:04 题目描述: 输入两个单调递增的链表,输出两个链表合成后的链表,当然我们需要合成后的链表满足单调不减规则.(hi ...
- 剑指offer十六之合并两个排序的链表
一.题目 输入两个单调递增的链表,输出两个链表合成后的链表,当然我们需要合成后的链表满足单调不减规则. 二.思路 注:链表1和链表2是两个递增排序的链表,合并这两个链表得到升序链表为链表3. 首先分析 ...
- 【剑指Offer】16、合并两个排序的链表
题目描述: 输入两个单调递增的链表,输出两个链表合成后的链表,当然我们需要合成后的链表满足单调不减规则. 解题思路: 首先需要判断几个特殊情况,即判断输入的两个指针是否为空.如果第一个 ...
- 剑指offer(16)合并两个排序的链表
题目描述 输入两个单调递增的链表,输出两个链表合成后的链表,当然我们需要合成后的链表满足单调不减规则. 题目分析 重点抓住这两个链表都是单挑递增的,因此我们只需要不断地比较他们的头结点就行,明显这是个 ...
- 剑指offer-面试题17.合并两个排序的链表
题目:输入两个递增的排序的链表,合并这两个链表并使新链表中的节点仍然是 按照递增排序的.例如链表1链表2合并为链表3. List1:->->-> List2:->->-& ...
- 《剑指offer》面试题17 合并两个排序的链表 Java版
我的方法:新初始化一个链表头,比较两个链表当前节点的大小,然后连接到该链表中.遍历两个链表直到null为止. public ListNode merge(ListNode first, ListNod ...
- 【剑指offer】面试题 25. 合并两个排序的链表
面试题 25. 合并两个排序的链表 NowCoder 题目描述 输入两个单调递增的链表,输出两个链表合成后的链表,当然我们需要合成后的链表满足单调不减规则. Java 实现 ListNode Clas ...
- 【剑指Offer面试题】 九度OJ1518:反转链表
与其非常快写出一段漏洞百出的代码,倒不如细致分析再写出鲁棒的代码. 提前想好測试用例(输入非空等等)进行測试改动代码. 题目链接地址: http://ac.jobdu.com/problem.php? ...
- 剑指offer面试题17:合并两个排序的链表
题目:输入两个递增排序的链表,合并这两个链表并使新链表中的节点人是按照递增排序的.解题思路:两个链表分别都已经是有序的了,遍历链表的时候只要比较两个链表当前位置大小,取出最小的添加到新链表中. 可以有 ...
随机推荐
- Android Window 9问9答
1.简述一下window是什么?在android体系里 扮演什么角色? 答:window就是一个抽象类,他的实现类是phoneWindow.我们一般通过windowManager 来访问window. ...
- jQuery学习备忘
jQuery对象转换成DOM对象 var #cr = $("#cr"); //jQuery对象 var cr = $cf[0]; //DOM对象 alert(cr.checked) ...
- linux下的加减运算
命令: echo rep 如果你有些编程方面的概念,最有意思的是用gdb,它可以进行进制转换,浮点数运算,数据类型占用字节数等等,很方便. (gdb) p 2+5$21 = 7(gdb) p 2/5$ ...
- jdbc操作数据库返回结果集的注意事项
import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSet; import java.sq ...
- eclipse插件explorer安装使用
我们知道myeclipse有个open in explorer的按钮.可以方便我们打开任意IDC下的文件或则插件目录 但是eclipse下确没有.因此需要下载下载个eclipse explorer插件 ...
- 使用 Google Fonts 为网页添加美观字体
前言 文字是网页中很重要的组成部分.为文字选择一个合适的字体,能够更好的展现一个网站的个性,表达所要传递的信息,同时吸引用户来产生兴趣. 说到字体,我们首先会想到 CSS 里面的 font,例如: & ...
- 横版动作MOBA《超宇宙》首测试玩曝光 详解游戏特色(转)
http://play.163.com/15/0911/11/B37RHHO100314J6L.html
- HTML 学习进度备忘
书签:”HTML 高级教程“及后面的内容尚未学习,另外跳过的内容有待跟进 __________________ 学习资源:W3School. 开始时间:2013.11.20 简述:此网址做为学习教程相 ...
- 【LeetCode】102 - Binary Tree Level Order Traversal
Given a binary tree, return the level order traversal of its nodes' values. (ie, from left to right, ...
- 【LeetCode】36 - Valid Sudoku
Determine if a Sudoku is valid, according to: Sudoku Puzzles - The Rules.(http://sudoku.com.au/TheRu ...