题目
将两个升序链表合并为一个新的升序链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。
示例:
输入:1->2->4, 1->3->4
输出:1->1->2->3->4->4
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/merge-two-sorted-lists
解题
思路
跟归并排序的合并情况的思路一样,具体可看 Leetcode | 数组中的逆序对 这篇博文中对归并排序的详细介绍。
因为两个链表都是升序的,所以最小的都在最左边,假设初始化两个指针分别在两个链表的最左边,依次对比,选出更小的即合并之后当前最小加入结果链表,相应指针后移继续比较,直至所有元素都比较完,合并后的元素也排序完了。
递归实现
将指针的右移用递归实现
/**
* Definition for singly-linked list.
* public class ListNode {
* int val;
* ListNode next;
* ListNode(int x) { val = x; }
* }
*/
class Solution {
public ListNode mergeTwoLists(ListNode l1, ListNode l2) {
//递归
//判断特殊情况
if(l1 == null)