LeetCode刷题日记(简单)- 21. 合并两个有序链表

123 阅读2分钟

前言

一个小伙伴说希望成立一个刷题小组,本就着富强、民主、文明、和谐,倡导自由、平等、公正、法治,倡导爱国、敬业、诚信、友善,积极培育社会主义核心价值观,我答应他了。

因为也没有刷过题,比较菜。然后就看了下别人家的孩子怎么刷题的,这里附上链接。

-力扣传送门-

朝花夕拾 - 2019 总结(附 283 道 LeetCode 题解)

我是如何刷 LeetCode 的?

题目描述:

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

示例 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]
/**
 * Definition for singly-linked list.
 * function ListNode(val, next) {
 *     this.val = (val===undefined ? 0 : val)
 *     this.next = (next===undefined ? null : next)
 * }
 * 哪里有什么思路,暴力解题呗
 * 首先还是要给不了解链表的同学补点小知识点,本人也比较菜,有说得不对的地方还望指正。
 * 从上面ListNode的定义我们能看出,实例对象有val(值),next(指针)。所以每个节点都有一个数据域和指针域,节点也叫结点。
 * 为什么说是暴力解题呢?因为我们发现刨去节点的概念,我们看到的就是两个数组,根据题目,我们给他重新排序就好了。
 * 我们还发现一个规律,有效节点遍历完之后,看定义,再去获取val是 0 
 * 首先我们定义一个哑结点,用来收集每个节点。
 */
/**
 * @param {ListNode} list1
 * @param {ListNode} list2
 * @return {ListNode}
 */
var mergeTwoLists = function(list1, list2) {
    var res = new ListNode();
    var head = res;
    while (list1 && list2) {
        if (list1.val < list2.val) {
            res.next = new ListNode(list1.val);
            list1 = list1.next;
        } else {
            res.next = new ListNode(list2.val);
            list2 = list2.next;
        }
        res = res.next;
    }
    if (list1) {
        res.next = list1;
    }
    if (list2) {
        res.next = list2;
    }
    return head.next;
};