题目描述
输入两个单调递增的链表,输出两个链表合成后的链表,当然我们需要合成后的链表满足单调不减规则。
public class 合并有序链表 {
public static void main(String[] args) {
ListNode list1 = new ListNode(1);
ListNode list2 = new ListNode(2);
ListNode list3 = new ListNode(4);
list1.next = list2;
list2.next = list3;
ListNode list4 = new ListNode(1);
ListNode list5 = new ListNode(3);
ListNode list6 = new ListNode(4);
list4.next = list5;
list5.next = list6;
ListNode merged = new ListNode(-1);
merged = Merge(list1, list4);
while (merged!=null) {
System.out.println(merged.val);
merged=merged.next;
}
}
public static ListNode Merge(ListNode list1,ListNode list2) {
/*递归 先比较头结点,找到较小的结点,
然后这个较小的结点的next指向递归中比较小值得返回值,
debug去回溯。。递归是真想不到,太菜了
*/
if(list1 == null) return list2;
if(list2 == null) return list1;
ListNode list = new ListNode(0);
if (list1.val < list2.val) {
list1.next = Merge(list1.next,list2);
return list1;
}else {
list2.next = Merge(list1,list2.next);
return list2;
}
/*非递归 定义一个指针p指向头结点,然后指针p一直指向较小值,再p.next 循环
*/
// if (list1 == null) return list2;
// if (list2 == null) return list1;
// ListNode headNode = new ListNode(0);
// ListNode p = headNode; //指向头结点的指针
// while (list1 != null && list2 != null) {
// if (list1.val<list2.val) {
// p.next = list1;
// list1 = list1.next;
// }else {
// p.next = list2;
// list2 = list2.next;
// }
// p = p.next;
// }
// if (list1 == null) p.next = list2;
// if (list2 == null) p.next = list1;
//
// return headNode.next;
}
}