1.合并两个有序链表
public class MergeTwoLists21 {
//定义一个单链表
public class ListNode {
int val; //当前节点值
ListNode next; //下一个节点值
//构造方法
ListNode(int x) { val = x; }
}
/**
* 方法:递归方法 时间复杂度:O(n + m)时间复杂度与合并后的链表长度为线性关系。
* @param l1 单链表1
* @param l2 单链表2
* @return 合并后的链表
* 例:输入 1->2->4, 1->3->4 ; 输出 1->1->2->3->4->4
* (1)对空链表存在的情况进行处理,假如 l1 为空则返回 l2 ,l2 为空则返回 l1。
*(2)比较两个链表第一个结点的大小,确定头结点的位置
*(3)头结点确定后,继续在剩下的结点中选出下一个结点去链接到第二步选出的结点后面,然后在继续重复(2 )(3) 步,直到有链表为空。
*/
public ListNode mergeTwoLists(ListNode l1, ListNode l2) {
if (l1 == null) {
return l2;
}
else if (l2 == null) {
return l1;
}
else if (l1.val < l2.val) {
l1.next = mergeTwoLists(l1.next, l2);
return l1;
}
else {
l2.next = mergeTwoLists(l1, l2.next);
return l2;
}
}
}