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

    递归解法

    递归的三大步骤:Base case + 拆解 + 组合

    BaseCase

    注意递归的终止条件一定要写对

    if(node == null || node.next == null) {
      return node;
    }
    

    拆解

    递归的拆解就是把大问题,分解成小一点点的问题,直到 base case 可以返回,进行第三步的组合。

    组合

    组合的意思是,假设我们能够拿到小问题的解,那么用小问题的解去构造大问题的解。

    这里很明显,在 2 后面接上 1 就行了。

    但是怎么拿到 2 呢?

    别忘了,原问题里,此时还有 1 指向 2 呢~

    也就是 node1.next = node2,

    然后把 2 指向 1:node2.next = node1

    合起来就是:node1.next.next = node1

    思路清楚就不绕,看着觉得绕的就是没想清楚哼~

    class Solution {
        public ListNode reverseList(ListNode head) {
            if(head == null || head.next == null) {
                return head;
            }
            ListNode newHead = reverseList(head.next);
            head.next.next = head;
            head.next = null;
            return newHead;
        }
    }
    

    时空间复杂度都是o(n)


    迭代方法省略不写

  • 相关阅读:
    Java学习之路(四)
    HTML学习之canves元素
    一些常用的SQL查询语句
    数据库实现动态表头
    Java学习之路(三)
    Java学习之路(二)
    Java学习之路(一)
    UML类图几种关系的总结(转)
    vue 项目全局修改element-ui的样式
    NGINX 资料
  • 原文地址:https://www.cnblogs.com/swifthao/p/13201474.html
Copyright © 2011-2022 走看看