zoukankan      html  css  js  c++  java
  • 剑指 Offer 24. 反转链表

    1. 题目

    定义一个函数,输入一个链表的头节点,反转该链表并输出反转后链表的头节点。

    2. 示例

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

    限制:

    0 <= 节点个数 <= 5000

    3.  题解

    本题给了两种解题方式:栈和迭代

      • 因为本题是要倒序。所以第一想法都是栈,栈的思想是先进后出。
      • 第一遍依次遍历链表,将节点放入栈。
      • 第二遍遍历栈,依次将栈顶元素加入链表
    • 迭代
      • 在遍历链表时,将当前节点的 next 指针改为指向前一个节点。由于节点没有引用其前一个节点,因此必须事先存储其前一个节点。在更改引用之前,还需要存储后一个节点。最后返回新的头引用。

    4. 实现

    4.1 栈

     1 //
     2     public ListNode reverseListA(ListNode head) {
     3         // 定义栈,将链表的依次压如栈底
     4         Stack<ListNode> stack = new Stack<>();
     5         if(head == null) return null;
     6         while (head != null) {
     7             stack.push(head);
     8             head = head.next;
     9         }
    10         // 获取栈顶元素,并将其作为头结点
    11         ListNode cur = stack.pop();
    12         // 指向头头结点
    13         ListNode p = cur;
    14         // 依次出栈
    15         while (!stack.empty()) {
    16             // 依次加入链表
    17             cur.next = stack.pop();
    18             cur = cur.next;
    19         }
    20         // 最后一个元素为空
    21         cur.next = null;
    22         return p;
    23     }

    4.2 迭代

     1 // 迭代
     2     public ListNode reverseListB(ListNode head) {
     3         ListNode prev = null, cur = head;
     4         while (cur != null) {
     5             // 获取下一个节点
     6             ListNode next = cur.next;
     7             // 当前节点的下一节点指向prev
     8             cur.next = prev;
     9             // 再反过来赋值,就达到了prev到达头结点
    10             prev = cur;
    11             // 遍历下一个节点
    12             cur = next;
    13         }
    14         return prev;
    15     }

    5. 结语

      努力去爱周围的每一个人,付出,不一定有收获,但是不付出就一定没有收获! 给街头卖艺的人零钱,不和深夜还在摆摊的小贩讨价还价。愿我的博客对你有所帮助(*^▽^*)(*^▽^*)!

      如果客官喜欢小生的园子,记得关注小生哟,小生会持续更新(#^.^#)(#^.^#)。

    但行好事 莫问前程
  • 相关阅读:
    VS2017使用inet_ntoa()产生错误的解决方法
    ET框架:如何运行ET-Demo
    ProtoBuf入门
    AssetBundle入门
    UML图写法
    Visual Studio小技巧-引用项目外部的类
    UnityECS(一)UnityECS学习资料
    关于如何利用MySQL Workbench导入Excel表格
    SublimeText3插件安装(未完更新)
    Unity中Animator的2DSprite动画控制与使用
  • 原文地址:https://www.cnblogs.com/haifwu/p/14999624.html
Copyright © 2011-2022 走看看