• [LeetCode] 21. 合并两个有序链表


    传送门:[LeetCode] 21. 合并两个有序链表

    题目描述

    将两个有序链表合并为一个新的有序链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。

    示例 :

    输入:1->2->4, 1->3->4
    输出:1->1->2->3->4->4

    链表定义如下:

    public class ListNode {
        int val;
        ListNode next;
    
        ListNode(int x) {
            val = x;
        }
    }
    

    分析与代码

    解法一、递归

    • 当某一个链表为空,可直接返回另一个链表。
    • 比较两个结点值,若 l1 小,对 l1.next 和 l2 进行递归合并,赋值给 l1.next,返回 l1。否则对 l2.next 和 l1 进行递归合并,赋值给 l2.next,返回 l2。

    代码:

    class Solution {
        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(l1, l2.next);
                return l2;
            }
        }
    }
    

    解法二、迭代

    • 先定义一个哑结点,指向新链表的头。
    • 当 l1 和 l2 都非空时,比较两结点的值,插入较小值。
    • 当有一个链表为空,则直接连向剩下的链表。

    代码:

    class Solution {
        public ListNode mergeTwoLists(ListNode l1, ListNode l2) {
            ListNode dumb = new ListNode(0), cur = dumb;
            while (l1 != null && l2 != null) {
                if (l1.val < l2.val) {
                    cur.next = l1;
                    l1 = l1.next;
                } else {
                    cur.next = l2;
                    l2 = l2.next;
                }
                cur = cur.next;
            }
            cur.next = l1 == null ? l2 : l1;
            return dumb.next;
        }
    }
    

    小结

    链表的插入操作简单,只需要改一下指向即可。



    ┆ 然 ┆   ┆   ┆   ┆ 可 ┆   ┆   ┆ 等 ┆ 暖 ┆
    ┆ 而 ┆ 始 ┆   ┆   ┆ 是 ┆ 将 ┆   ┆ 你 ┆ 一 ┆
    ┆ 你 ┆ 终 ┆ 大 ┆   ┆ 我 ┆ 来 ┆   ┆ 如 ┆ 暖 ┆
    ┆ 没 ┆ 没 ┆ 雁 ┆   ┆ 在 ┆ 也 ┆   ┆ 试 ┆ 这 ┆
    ┆ 有 ┆ 有 ┆ 也 ┆   ┆ 这 ┆ 会 ┆   ┆ 探 ┆ 生 ┆
    ┆ 来 ┆ 来 ┆ 没 ┆   ┆ 里 ┆ 在 ┆   ┆ 般 ┆ 之 ┆
    ┆   ┆   ┆ 有 ┆   ┆   ┆ 这 ┆   ┆ 降 ┆ 凉 ┆
    ┆   ┆   ┆ 来 ┆   ┆   ┆ 里 ┆   ┆ 临 ┆ 薄 ┆
  • 相关阅读:
    haproxy 超时自动重发
    haproxy 超时机制
    错误代码: 1017 Can't find file: '.us _driver_info@ff1b.frm' (errno: 22
    perl unicode utf-8 x转换
    perl lwp关闭ssl校验
    mysql 死锁问题
    报表软件JS开发引用HTML DOM的windows对象
    自动登陆铜板街
    ThinkPHP 3.1.2 查询方式的一般使用2
    ThinkPHP 3.1.2 查询方式的一般使用1
  • 原文地址:https://www.cnblogs.com/qiu_jiaqi/p/LeetCode-21.html
Copyright © 2020-2023  润新知