您的位置:首页 > 职场人生

剑指offer面试题25:合并两个排序的链表-java

2017-06-23 11:37 357 查看
题目:输入两个递增排序的链表,合并这两个链表并使新链表中的结点仍然是按照递增排序的。例如输入图中的链表1和链表2,则合并之后的升序链表3所示。



这是一个经常被各公司采用的面试题。在面试过程中,我们发现应聘者最容易犯两个错误:一是在写代码之前没有对合并的过程想清楚,最终合并出来的链表要么中间断开要么并没有递增排序;二是代码的鲁棒性方面存在问题,程序一旦有特殊的输入(如空链表)就会崩溃。接下来分析如何解决这个问题。

首先分析合并两个链表的过程。我们的分析从合并两个链表的头结点开始。链表1的头结点的值小于链表2的头结点的值,因此链表1的头结点将是合并后链表的头结点,如图所示:



public class mergeList {
//合并两个排序的链表
public ListNode mergeList(ListNode pHead1 , ListNode pHead2){
//先判断链表1和2是否为空的情况
if (pHead1 == null)
return pHead2;
else if (pHead2 == null)
return pHead1;
//如果链表1的第一个节点小于2的,该节点为头结点,否则为第二个链表的头结点
ListNode head = null;
if (pHead1.val < pHead2.val){
head = pHead1;
head.next = mergeList(pHead1.next,pHead2);
}else {
head = pHead2;
head.next = mergeList(pHead1,pHead2.next);
}
return head;
}
}


4000
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: