zoukankan      html  css  js  c++  java
  • leetcode 206.反转链表

    反转一个单链表。

    示例:

    输入: 1->2->3->4->5->NULL
    输出: 5->4->3->2->1->NULL

    这道题要求我们将一个链表反转,刚一看这道题目反转好像很难,但仔细分析后发现这道题的关键就是next指向问题

    平时我们做的链表题目都是让它的当前节点指向它的后一个节点,这样一步一步循环,那么这道题就跟之前的正好相反,每次遍历都是让它的当前节点指向它的前一个节点,知道了这点这个题目就好做了。画个草图理解一下

     每次循环都让当前指针指向前一个节点

    var reverseList = function(head) {
            //先判断为null的情况
            if (head == null || head.next == null) {
                return head;
            }
    
            var current  = head //当前节点
            var pre = null      //前一个节点
            while(current != null){
                var next = current.next //先保存一下当前节点的下一个节点
                current.next = pre //让当前节点指向它的前一个一个节点
                pre = current  // 前一个指针后移
                current = next //当前指针后移
                //current = current.next 错误的写法,因为这个时候current.next = pre,current = pre = null,跳出了循环
            }
            return pre
        };

    这道题的关键在于当前指针指向前一个节点,还有就是每次保存当前的节点的下一个节点.

    递归解法

    var reverseList = (head, q = null) => {
        console.log(q);
        if (head) {
          return reverseList(head.next, {
            val: head.val,
            next: q,
          });
        }
        return q;
      }

    虽然看不懂,但还是要记录一下,万一以后水平提升了说不定就能看懂了

    不积跬步无以至千里
  • 相关阅读:
    Linux文件权限详解
    linux软链接和硬链接的区别
    linux vi编辑常用命令
    juery下拉刷新,div加载更多元素并添加点击事件(二)
    性能调优常见问题与方案
    测试人员怎么避免背黑锅?
    测试部工作检查观点
    如何为一组任务确定计划,估计每个任务所需的时间?
    测试人员和开发人员如何更高效的配合工作
    测试人员职业规划
  • 原文地址:https://www.cnblogs.com/lyt0207/p/12369366.html
Copyright © 2011-2022 走看看