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. 结语

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

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

    但行好事 莫问前程
  • 相关阅读:
    【alpha】Scrum站立会议第2次....10.17
    【alpha】Scrum站立会议第1次····10.16
    【week4】技术随笔psp
    【week4】课堂Scrum站立会议
    【week3】psp (技术随笔)
    【week3】四则运算 单元测试
    【week3】词频统计 单元测试
    Oracle Split字符串

    指针函数与指针数组
  • 原文地址:https://www.cnblogs.com/haifwu/p/14999624.html
Copyright © 2011-2022 走看看