将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。
示例
输入:l1 = [1,2,4], l2 = [1,3,4]
输出:[1,1,2,3,4,4]
链接:https://leetcode-cn.com/problems/merge-two-sorted-lists/
目录
解题思路
遍历
考虑四种情况
① l2比l1长
② l1比l2长
③ l1的值比l2的值大的情况
④ l2的值比l1大的情况
定义一个resultNode返回链表。还需要定义一个temp链表 指向头结点的尾部,进行尾插法。
代码
class Solution {
public ListNode mergeTwoLists(ListNode l1, ListNode l2) {
ListNode head = new ListNode();
ListNode curr = head;
while(l1 != null && l2 != null){
if(l1.val >= l2.val){
curr.next =l2;
l2 = l2.next;
}else{
curr.next =l1;
l1 = l1.next;
}
curr = curr.next;
}
curr.next = l1 ==null ? l2 : l1;
return head.next;
}
}
递归
- 递归函数必须要有终止条件,否则会出错;
- 递归函数先不断调用自身,直到遇到终止条件后进行回溯,最终返回答案。
代码
public ListNode mergeTwoLists(ListNode l1, ListNode l2) {
if (l1 == null) {
return l2;
}
if (l2 == null) {
return l1;
}
if (l1.val < l2.val) {
l1.next = mergeTwoLists(l1.next, l2);
return l1;
} else {
l2.next = mergeTwoLists(l2.next, l1);
return l2;
}
}
参考链接(本文仅限个人学习交流,支持原创,侵权必删)