合并两个排序链表
题目描述
输入两个单调递增的链表,输出两个链表合成后的链表,当然,我们需要合成后的链表满足单调不减规则。
解题思路
该题首先想到的是新增一个链表,然后循环比较原来两个链表中值的大小,将小的放入新的链表中,循环结束的条件是当两个链表中有一个链表已经循环结束,那么循环退出,将未循环结束的链表从循环到的当前节点直接接如新链表中即可。
还有一种解法是递归,首先,将比较两个链表当前值,若小,则将该链表的当前节点去掉,进入递归中。
实现代码
递归解法:
public ListNode Merge(ListNode list1,ListNode list2) {
if(list1 == null){
return list2;
}
if(list2 == null){
return list1;
}
if(list1.val <= list2.val){
list1.next = Merge(list1.next, list2);
return list1;
}else{
list2.next = Merge(list1, list2.next);
return list2;
}
}
非递归解法:
public ListNode Merge(ListNode list1,ListNode list2) {
if(list1==null&&list2==null)
return null;
else if(list1 == null)
return list2;
else if(list2 ==null)
return list1;
ListNode list =null;
if(list1.val<list2.val) {
list = list1;
list1 = list1.next;
}
else {
list = list2;
list2 = list2.next;
}
ListNode temp = list;
while (list1!=null && list2!=null){
if(list1.val<list2.val)
{
temp.next = list1;
list1 = list1.next;
}
else {
temp.next = list2;
list2 = list2.next;
}
temp = temp.next;
}
if(list1!=null)
temp.next = list1;
else if(list2!=null)
temp.next = list2;
return list;
}