阅读 174

leetcode-合并两个有序链表

这是我参与8月更文挑战的第12天,活动详情查看:8月更文挑战

公司的旧MAC到了使用年限,换了1台新的,今天安装了不少软件。昨天刚好听了一个MAC开发提效的分享,发现之前可能根本不会用MAC。不过优秀的软件,家里的windows电脑也有不少,也不分系统,特别从win10开始,如果你做个有心人,去学习和发现一些新软件的话,也会让你用起来很爽。
分享一个上周听到的词汇:饱和攻击,虽然我自己也特别讨厌互联网新造的一些词和所谓的黑话,不过这个词感觉还挺形象的,也不需要解释。我们只有从很多简单重复的劳动中解放出来,才能对自己的感兴趣的领域发起饱和攻击。毕竟,时间要浪费在自己喜欢的事物上。
还有上周立下的锻炼的Flag,本周已经进行三天了,也还没有倒,继续坚持,身体才是革命的本钱。

回到正题,继续leetcode每天做1题,日拱一卒,功不唐捐,今天是第21题

题目

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

示例 1:
merge_ex1.jpg 输入:l1 = [1,2,4], l2 = [1,3,4]
输出:[1,1,2,3,4,4]

示例 2:
输入:l1 = [], l2 = []
输出:[]

示例 3:
输入:l1 = [], l2 = [0]
输出:[0]

思路

也是挺水的题,理解一下题意,现在2个链表都是从小到大有序的,需要合并之后,依然保持有序。 可以用while循环来写,但是判断的内容会比较多,需要注意链表是否为空。 用递归就是比较简洁的写法了,首先判断2个链表中是不是有空的,有空的就返回另外一个;如果都不空的话,比较一下头结点,取小的作为头结点;假设链表1的头节点比较小,然后递归链表1的头节点作为合并后链表的头结点,递归链表1去掉头结点后的子链表和链表2。

Java版本代码

/**
 * Definition for singly-linked list.
 * public class ListNode {
 *     int val;
 *     ListNode next;
 *     ListNode() {}
 *     ListNode(int val) { this.val = val; }
 *     ListNode(int val, ListNode next) { this.val = val; this.next = next; }
 * }
 */
class Solution {
    public ListNode mergeTwoLists(ListNode l1, ListNode l2) {
        if (l1 == null) {
            return l2;
        } else 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;
        }
    }
}
复制代码
文章分类
后端
文章标签