由于递归思想没有根深蒂固,所以想了很久想到了一个非递归版本的。
写的时候,由于java不是很好,一直在纠结java的赋值的引用性。其实不用纠结。再次赋值时,就指向另外的引用了,相互之间其实没有影响。
/*
public class ListNode {
int val;
ListNode next = null;
ListNode(int val) {
this.val = val;
}
}*/
public class Solution {
public ListNode Merge(ListNode list1,ListNode list2) {
ListNode cur1 = list1;
ListNode cur2 = list2;
ListNode temp = new ListNode(0);
ListNode cur = temp;
while(cur1!=null && cur2!=null){
if(cur1.val < cur2.val){
cur.next = cur1;
cur1 = cur1.next;
cur = cur.next;
}else{
cur.next = cur2;
cur2 = cur2.next;
cur = cur.next;
}
}
if(cur1 != null ){
cur.next = cur1;
}
if(cur2 != null){
cur.next = cur2;
}
return temp.next;
}
}
递归版本:
/*
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( null == list1 ){
return list2;
}
if( null == list2 ){
return list1;
}
if(list1.val < list2.val){
list1.next = Merge(list1.next,list2);
return list1;
}else{
list2.next = Merge(list1,list2.next);
return list2;
}
}
}