算法:单链表反转

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档

目录

一、问题描述

二、栈解法Stack

三、三指针法

总结


提示:以下是本篇文章正文内容,下面案例可供参考

一、问题描述

有个单链表,现要将其反转

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

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

二、栈解法Stack

解题思路:

栈的特点,先进后出,我们可以将链表节点入栈,然后再出栈,将出栈的元素连在一起,就是反转之后的单链表了。

代码示例:

三、三指针法

解题思路:

需要三个指针,分别指向当前、前一个、后一个节点,每断开一段关系,得记录下来关系的前后节点,然后这三个指针同步向后移动

代码示例:

public ListNode reverseList(ListNode head) {
    ListNode pre = null;
    while (head != null) {
        ListNode next = head.next;
        head.next = pre;
        pre = head;
        head = next;
    }
    return pre;
}

关键代码如上,next记录的永远是下一个节点,head记录的是当前节点,pre记录的是上一个节点,可以假设头节点前还有一个null节点 

理解这个代码有点儿绕,画个图看看

初始状态:

第一次演进:

第二次演进:

此时,head和next都指向null,pre指向了最后一个节点B,跳出while循环

最后把pre赋值给head,就完成了单链表的反转,由A指向B,变为B指向A。


总结

换一种思路,豁然开朗,多动手,简单到有手就行!

相关推荐

最近更新

  1. TCP协议是安全的吗?

    2023-12-14 15:46:04       16 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2023-12-14 15:46:04       16 阅读
  3. 【Python教程】压缩PDF文件大小

    2023-12-14 15:46:04       15 阅读
  4. 通过文章id递归查询所有评论(xml)

    2023-12-14 15:46:04       18 阅读

热门阅读

  1. QMS之SCAR&MRB小知识

    2023-12-14 15:46:04       34 阅读
  2. NFS远程文件共享系统!

    2023-12-14 15:46:04       34 阅读
  3. Excel针对导入数据存在空格及换行统一处理

    2023-12-14 15:46:04       50 阅读
  4. 在高数据量中如何优化MySQL的Group by语句?

    2023-12-14 15:46:04       40 阅读
  5. 如何理解HTML下的网页结构?

    2023-12-14 15:46:04       44 阅读
  6. 文心一言4.0使用指南

    2023-12-14 15:46:04       45 阅读
  7. K8S学习指南(7)-k8s核心概念Annotation

    2023-12-14 15:46:04       42 阅读
  8. 大语言模型--能力

    2023-12-14 15:46:04       30 阅读
  9. Redis

    Redis

    2023-12-14 15:46:04      37 阅读
  10. canvas实现鼠标滚轮滚动缩放画布

    2023-12-14 15:46:04       45 阅读
  11. PHP 去除数组中元素值的前后空白符换行等

    2023-12-14 15:46:04       44 阅读
  12. C 库函数 - time()

    2023-12-14 15:46:04       46 阅读
  13. C++——STL标准模板库——容器详解——vector

    2023-12-14 15:46:04       29 阅读
  14. SQL游标详解

    2023-12-14 15:46:04       41 阅读