美文网首页
纪念一次leetcode提交一次就accepted的喜悦

纪念一次leetcode提交一次就accepted的喜悦

作者: 小前seant | 来源:发表于2017-02-08 09:39 被阅读60次

    题目比较简单:

    <h2>Merge Two Sorted Lists</h2>
    <h5>Merge two sorted linked lists and return it as a new list. The new list should be made by splicing together the nodes of the first two lists.</h5>

    简要说就是合并两个有序链表。
    如果新建一个列表,遍历两个列表依据大小复制到新列表中,比较简单,但是空间复杂度为O(n+m),所以想着直接在原列表上合并;

    直接上JS代码:

    /**
     * Definition for singly-linked list.
     * function ListNode(val) {
     *     this.val = val;
     *     this.next = null;
     * }
     */
    /**
     * @param {ListNode} l1
     * @param {ListNode} l2
     * @return {ListNode}
     */
    var mergeTwoLists = function(l1, l2) {
        var prev = null;
        var last = null;
        if (l1 && l2 && l1.val > l2.val) {
            return mergeTwoLists(l2, l1); //保证起始状态l1头结点小于l2的
        }
        var head = l1 ? l1 : l2;
        while (l1 && l2) {
            prev = l1;
            while (l1 && l1.val <= l2.val) {
                prev = l1;
                l1 = l1.next;
            }
            //开始第一个大于l2的,此时l1.val > l2.val
            if (l1) {
                prev.next = l2;
                last = l2;
                while (l2 && l2.val < l1.val) {
                    last = l2;
                    l2 = l2.next;
                }
                last.next = l1;
            } else {
                prev.next = l2;
            }
        }
        return head;
    };
    
    

    思路也很简单:将l2并入到l1中(l1的头结点<l2的头结点)。思考两种情况:l1的结点什么时候大于l2的结点,当大于的时候怎么做,小于的时候怎么做即可。于是有了上述代码,不复杂一看就明白。
    写此记录一下第一次提交就accepted的一种喜悦感。希望以后能越来越多的一次通过。

    相关文章

      网友评论

          本文标题:纪念一次leetcode提交一次就accepted的喜悦

          本文链接:https://www.haomeiwen.com/subject/dmlvittx.html