LeetCode21. 合并两个有序链表
题目描述
/**
*
* 将两个升序链表合并为一个新的 升序 链表并返回。
* 新链表是通过拼接给定的两个链表的所有节点组成的。
*
*
*/
思路分析
- 合并两条有序链表可以考虑使用递归的思路
- 递归,即函数自己调用自己,不过在每次调用过程中,参数都要发生变化,向递归结束的条件逼近,不然会形成死循环
- 此题目递归递归结束的条件为两条链表任意一个为空
- 采用先找最小头节点的方法,那个头节点小,则把这个头节点放到合并后链表的最前方,形成递归
- 注意递归每次执行完都要有返回
源码及解析
public ListNode mergeTwoLists(ListNode l1, ListNode l2) {
//递归解法
//递归结束的条件,即两个链表任意一个为空
if (l1 == null){
return l2;
}else if (l2 == null){
return l1;
//如果L1的头节点的值小于L2的头节点的值,则将L1的头节点放到两条合并链表的最前边
}else if (l1.val < l2.val){
l1.next = mergeTwoLists(l1.next,l2);
return l1;
}else {
//如果L2的头节点的值小于等于L1的头节点的值,则将L2的头节点放到两条合并链表的最前边
l2.next = mergeTwoLists(l2.next,l1);
return l2;
}
}