合并两个排序的链表
题目描述
输入两个单调递增的链表,输出两个链表合成后的链表,当然我们需要合成后的链表满足单调不减规则。
具体实现
**解题思路:**利用递归来完成,首先要解决好空链表的情况,
1.链表1为空,直接返回链表2。
2.链表2为空,直接返回链表1.
3.链表1、2都为空则返回null。
其次开始比较链表1、2的头结点的大小,创建一个结点newlist,两种情况
1.list1.val > list2.val,此时需要把list2的头结点取出来newlist = list2,并从list2的下一个结点调用递归Merge(list1,list2.next)
2.list1.val < list2.val,此时需要把list1的头结点取出来newlist = list1,并从list1的下一个结点调用递归Merge(list1.next,list2)
最终的返回值newlist就是新的合并好的链表。
/*
public class ListNode {
int val;
ListNode next = null;
ListNode(int val) {
this.val = val;
}
}*/
public class Solution {
public ListNode Merge(ListNode list1,ListNode list2) {
//处理空链表问题,也是递归出口
if(list1 == null)
return list2;
else if(list2 == null)
return list1;
ListNode newlist = null;
if(list1.val < list2.val) {//此时需要保存的是list1当前结点
newlist = list1;
newlist.next = Merge(list1.next, list2);
}else {//此时需要保存的是list2当前结点
newlist = list2;
newlist.next = Merge(list1,list2.next);
}
return newlist;
}
}