美文网首页LeetcodeLeetCode算法
JS优雅实现反转一个单链表

JS优雅实现反转一个单链表

作者: Mr_Alpha | 来源:发表于2018-03-11 11:41 被阅读14次

    Reverse Linked List
    反转一个单链表。
    LeetCode连接:https://leetcodechina.com/problems/reverse-linked-list/description/

    使用递归的方式。

    优势:

    1. 借用JS强大的闭包功能
    2. 只需遍历一遍链表

    缺点:
    递归的缺点:占空间

    思路:

    1. 递归的基线条件:遍历到末节点(node.next === null)
    2. 递归的递归条件:node.next !== null
    3. 当遇到末节点时,返回末节点,前一节点接收末节点,并把末节点的next设置为自身,返回前一节的,继续下去
    4. 考虑特殊情况:undefined和null

    直接贴代码:

    /**
     * Definition for singly-linked list.
     * function ListNode(val) {
     *     this.val = val;
     *     this.next = null;
     * }
     */
    /**
     * @param {ListNode} head
     * @return {ListNode}
     */
    var reverseList = function (head) {
        // 闭包
        if (head === undefined || head === null) return null
        var originalHead = head
        var reverseHead
        var reverse = function (head) {
            if (head.next === null) {
                reverseHead = head
                return head
            } else {
                var node = reverse(head.next)
                node.next = head
                if (originalHead === head) {
                    head.next = null
                    return reverseHead
                } else {
                    return head
                }
            }
        }
        return reverse(head)
    };
    

    运行时间如下,小于100ms:


    image.png

    相关文章

      网友评论

        本文标题:JS优雅实现反转一个单链表

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