zoukankan      html  css  js  c++  java
  • [LeetCode] Reverse Linked List

    Reverse a singly linked list.

    这题因为palindrome linked list 的时候需要就顺便做了一下。利用三个指针:prev, now, next 相互倒腾就行。

    /**
     * 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) return null;
        var prev = null;
        var now = head;
        var next = head.next
        
        while (now) {
            now.next = prev;
            prev = now;
            now = next;
            if (next) next = next.next;
        }
        return prev;
    };

    还可以递归的解决。算法2:

    /**
     * Definition for singly-linked list.
     * function ListNode(val) {
     *     this.val = val;
     *     this.next = null;
     * }
     */
    /**
     * @param {ListNode} head
     * @return {ListNode}
     */
     var reverseHelp = function(head) {
         if (!head.next) return head;
         reverseHelp(head.next).next = head;
         return head;
     }
     
    var reverseList = function(head) {
        if (!head) return null;
        var tail = head;
        while (tail.next) {
            tail = tail.next;
        }
        
        reverseHelp(head).next = null;
        return tail;
    };

    但是问题是翻转以后,原来的尾巴变成了头,我没有想到太好的递归方法,就先遍历了一遍找到尾,然后再用递归的翻转head。

    第一次提交的时候出现了bug,原因是递归过程 reverseHelp 是返回链表尾,所以最后别忘了把他最终返回的链表尾巴.next = null;

  • 相关阅读:
    Java总结篇系列:Java多线程(一)
    path方法总结
    Ember模板中的操作指向
    EmberJS路由详解
    观察器observes与对象初始化
    emberjs重写补充类之reopen方法和reopenClass方法
    emberjs创建类
    2014Ember带来怎样的变化?
    创建应用和模型和控制器
    自定义指令
  • 原文地址:https://www.cnblogs.com/agentgamer/p/4908120.html
Copyright © 2011-2022 走看看