题目要求
将两个有序链表合并为一个新的有序链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。
示例
输入:1->2->4, 1->3->4
输出:1->1->2->3->4->4
Java解题
首先,建一个链表类。
public class ListNode {
int val; //值
ListNode next; //下一个结点
ListNode(int x) { val = x; } //构造函数
}
- 方法一
public ListNode mergeTwoLists(ListNode l1, ListNode l2) {
if (l1 == null && l2 == null) return null;
if (l1 == null) return l2;
if (l2 == null) return l1;
ListNode root = null;
if (l1.val > l2.val){
root = l2;
root.next = mergeTwoLists(l1, l2.next);
}else{
root = l1;
root.next = mergeTwoLists(l1.next, l2);
}
return root;
}
执行用时:0 ms, 在所有 java 提交中击败了100.00%的用户
内存消耗:39.3 MB, 在所有 java 提交中击败了69.07%的用户
解题思路:利用递归的思想解决问题,l1为空直接返回l2,l2为空直接返回l1,都为空直接返回null。定义一个root结点,比较l1的头结点值跟l2的头结点值,将小的值赋给root,然后将小的next结点,与另一个listnode递归计算。