当前位置: 首页 > news >正文

反转一个单链表

反转一个单链表

题意:反转一个单链表。
示例: 输入: 1->2->3->4->5->NULL 输出: 5->4->3->2->1->NULL

思路

需要虚拟节点么?
答:不需要,因为没有删除节点,只是改变了节点的指向。
遍历之后,如果找到之前的节点?
答:双指针。我们利用双指针来标识前一个节点。
首先我们为什么需要前一个节点?
答:因为当前节点的下一个节点需要指向前一个节点。所以需要下一个节点。
给兄弟们上一个动图,就明白一切了。
在这里插入图片描述

代码

//class ListNode{
//    private int val;
//    private ListNode next;
//    ListNode(int val){
//        this.val = val;
//    }
//    ListNode(int val,ListNode next){
//        this.val = val;
//        this.next = next;
//    }
//}
public class reverseTreeTest {//1. 双指针法public ListNode reverserTree(ListNode head) {ListNode prev = null;ListNode cur = head;ListNode temp;while (cur != null) {//步骤一:记录下下一个节点temp = cur.next;//步骤二:当前节点指向前一个节点cur.next = prev;//步骤三:之前的节点变成cur节点(因为1->null 之后,当遍历2的时候,需要 2->prev(1->null),如果这里不赋值,会变成2->null)prev = cur;//步骤四:当前节点变成下一个节点cur = temp;}return prev;}}

总结

双指针法在解决链表的时候,是一种常见的算法。比如后面的链表中寻找环,也是利用双指针(快慢指针)相遇来判断是否有环。
这个题目,唯一需要注意的是:虽然只有4行代码。但是你得理解每行代码的意义。实在不行,自己手动画一画,也就理解了。如果还是理解不了,先记着吧,后面熟能生巧。嘻嘻。

http://www.lryc.cn/news/301777.html

相关文章:

  • 拿捏c语言指针(中)
  • 鸿蒙语言ArkTS(更好的生产力与性能)
  • VBA技术资料MF120:打印固定标题行列
  • MongoDB聚合运算符:$add
  • 《剑指Offer》笔记题解思路技巧优化 Java版本——新版leetcode_Part_4
  • 数据库第四次实验
  • 基于PPNSA+扰动算子的车间调度最优化matlab仿真,可以任意调整工件数和机器数,输出甘特图
  • UnityShader——06UnityShader介绍
  • 人工智能学习与实训笔记(一):零基础理解神经网络
  • LeetCode刷题小记 一、【数组】
  • iOS总体框架介绍和详尽说明
  • 【C++】const与constexpr详解
  • 蓝桥杯:日期统计讲解(C++)
  • Python re.findall()中的正则表达式包含多个括号时的返回值——包含元组的列表
  • Python——列表
  • 无人机图像识别技术研究及应用,无人机AI算法技术理论,无人机飞行控制识别算法详解
  • 清华AutoGPT:掀起AI新浪潮,与GPT4.0一较高下
  • 人工智能学习与实训笔记(二):神经网络之图像分类问题
  • SSM框架,spring-aop的学习
  • 【设计模式】4、策略模式
  • 【C++学习手札】多态:掌握面向对象编程的动态绑定与继承机制(深入)
  • 【机构vip教程】Android SDK手机测试环境搭建
  • 2024.2.18
  • Haproxy实验
  • CSRNET图像修复,DNN
  • 004 - Hugo, 分类
  • Vue3之ElementPlus中Table选中数据的获取与清空方法
  • Leetcode 516.最长回文子序列
  • cool Node后端 中实现中间件的书写
  • Leecode之面试题消失的数字