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

剑指offer面试17 合并两个排序的链表

2017-07-07 12:05 459 查看

一、题目

输入两个单调递增的链表,输出两个链表合成后的链表,当然我们需要合成后的链表满足单调不减规则。

二、分析

如果链表1为空,将输出链表2;

如果链表2为空,将输出链表1;

如果链表1和链表2都不为空,则比较指向链表1和链表2的节点值,如果指针1的节点值小于指针2的节点值,则将输出链表的指针指向指针1;反之则将输出链表的指针指向指针2;

当链表1再次为空时,将输出链表指向指针2;

当链表2再次为空时,将输出链表指向指针1;

三、代码实现

/*
* 题目:
* 输入两个单调递增的链表,输出两个链表合成后的链表,当然我们需要合成后的链表满足单调不减规则。
*/
public class Test17 {
public ListNode Merge(ListNode list1,ListNode list2) {
if(list1 == null){
return list2;
}
if(list2 == null){
return list1;
}
ListNode head = null;
//确定输出链表的头结点
if(list1.value < list2.value){
head = list1;
list1 = list1.next;
}else{
head = list2;
list2 = list2.next;
}
ListNode temp = head;
while(list1 != null && list2 != null){
if(list1.value < list2.value){
temp.next = list1;
temp = temp.next;
list1 = list1.next;
}else{
temp.next = list2;
temp = temp.next;
list2 = list2.next;
}
}
if(list1 == null){
temp.next = list2;
}
if(list2 == null){
temp.next = list1;
}
return head;
}
}


四、递归实现

//递归实现
public ListNode Merge2(ListNode list1,ListNode list2) {
if(list1 == null){
return list2;
}
if(list2 == null){
return list1;
}
ListNode head = null;
if(list1.value < list2.value){
head = list1;
head.next = Merge2(list1.next, list2);
}else{
head = list2;
head.next = Merge2(list1, list2.next);
}
return head;
}
public void display(ListNode head){
if(head == null){
return;
}
ListNode temp = head;
while(temp != null){
System.out.print(temp.value+",");
temp = temp.next;
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  面试