题目描述
输入两个单调递增的链表,输出两个链表合成后的链表,当然我们需要合成后的链表满足单调不减规则。
例如
{1,2,3} {4,5,6}
输出
{1,2,3,4,5,6}
代码:(JAVA迭代版)
class ListNode {
int val;
ListNode next = null;
ListNode(int val) {
this.val = val;
}
}
public class Solution {
public ListNode Merge(ListNode list1,ListNode list2) {
ListNode root = null;
ListNode temp = null;
//使用temp的原因是我们返回值要返回第一个节点
//但是我们merge生成ListNode节点的时候要移动(next)节点好去链接新节点
//所以使用temp去移动next,而返回第一个root节点
/*
如果有一个链表为空,直接返回另外一个链表
*/
if(list1==null)
return list2;
if(list2==null)
return list1;
/*
开始遍历两条链表,比较大小,插入新链表
直到遍历到一条链表的尾部
*/
while(list1!=null&&list2!=null){
if(list1.val>list2.val){
//第一次比较生成根节点
if(root==null)
temp = root = new ListNode(list2.val);
//生成较小的值,都采用了连等于的模式,从右往左
else
temp = temp.next = new ListNode(list2.val);
list2 = list2.next;
}else{
//同上
if(root==null)
temp = root = new ListNode(list1.val);
else
temp = temp.next = new ListNode(list1.val);
list1 = list1.next;
}
}
//下面的两种情况是把未遍历完链表的剩余部分都加入到返回值链表中
if(list1!=null){
temp.next = list1;
}
if(list2!=null){
temp.next = list2;
}
return root;
}
}