【代码随想录 | 链表 02】反转链表

在这里插入图片描述

文章目录

  • 2.反转链表
    • 2.1题目
    • 2.2解法
      • 2.2.1双指针法
      • 2.2.2递归法

2.反转链表

2.1题目

206.反转链表——力扣链接

给你单链表的头节点 head ,请你反转链表,并返回反转后的链表。

  • 示例一:

img

输入:head = [1,2,3,4,5]
输出:[5,4,3,2,1]
  • 示例二:

img

输入:head = [1,2]
输出:[2,1]

2.2解法

  • 一共有两种解法:双指针法、递归法

2.2.1双指针法

  1. 定义两个指针pre和cur
    • pre初始化为Null
    • cur初始化为head,cur为即将被反转的元素
  2. 开始反转:
    • 使用tmp保存 cur.next,即cur的下一个节点
    • 反转:cur.next=pre,即指向上一个节点
    • 往后移动pre指针:pre=cur
    • 往后移动cur指针:cur=tmp
  3. 最后返回pre,即原来的最后一个节点
/*** Definition for singly-linked list.* public class ListNode {*     int val;*     ListNode next;*     ListNode() {}*     ListNode(int val) { this.val = val; }*     ListNode(int val, ListNode next) { this.val = val; this.next = next; }* }*/
class Solution {public ListNode reverseList(ListNode head) {ListNode tmp;ListNode pre=null;ListNode cur=head;while(cur!=null){tmp=cur.next;cur.next=pre;pre=cur;cur=tmp;}return pre;}
}

2.2.2递归法

递归法相对抽象一些,但是其实和双指针法是一样的逻辑,同样是当cur为空的时候循环结束,不断将cur指向pre的过程。

关键是初始化的地方,可以看到双指针法中初始化 cur = head,pre = NULL,在递归法中可以从如下代码看出初始化的逻辑也是一样的,只不过写法变了。

/*** Definition for singly-linked list.* public class ListNode {*     int val;*     ListNode next;*     ListNode() {}*     ListNode(int val) { this.val = val; }*     ListNode(int val, ListNode next) { this.val = val; this.next = next; }* }*/
class Solution {public ListNode reverseList(ListNode head) {//方法二:递归return reverse(null,head);}//反转:将cur指向preprivate ListNode reverse(ListNode pre,ListNode cur){if(cur==null){return pre;     //最后一个节点}ListNode tmp=cur.next;cur.next=pre;// pre=cur// cur=tmpreturn reverse(cur,tmp);   //反转:将tmp执行cur}
}

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/537492.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

DC电源模块的故障排除与维修方法

BOSHIDA DC电源模块的故障排除与维修方法 当DC电源模块出现故障时,可以按照以下步骤进行排除和维修: 1.检查电源输入:首先检查电源输入是否正常,包括输入电压是否稳定,输入电流是否符合要求。如果输入电源有问题&…

为了跳槽或提升自己,你会先学习哪一门编程语言?

通过多个调查表的分析,发现大家对于GO语言的兴趣和需求非常高。GO语言是一种由Google开发的静态类型、编译型语言,最初于2007年问世。这门语言的设计者是Robert Griesemer、Rob Pike和Ken Thompson,他们的初衷是为了弥补C和Java在大规模软件工…

中国钛合金自行车出口海外营销策略-大舍传媒

中国是世界上自行车产量最大的国家之一,而如今,它也在自行车制造领域迈出了一大步。Titan Super Bond与Bright Laser Technologies (BLT)合作,成功开发了中国和亚洲首款全3D打印钛合金自行车车架。 这款创新的自行车车架采用了BLT-A320机器&a…

基于YOLOv8深度学习的木薯病害智能诊断与防治系统【python源码+Pyqt5界面+数据集+训练代码】深度学习实战

《博主简介》 小伙伴们好,我是阿旭。专注于人工智能、AIGC、python、计算机视觉相关分享研究。 ✌更多学习资源,可关注公-仲-hao:【阿旭算法与机器学习】,共同学习交流~ 👍感谢小伙伴们点赞、关注! 《------往期经典推…

一文浅谈射频识别RFID

RFID,全称为Radio Frequency Identification,即射频识别,是一种通过无线电信号识别特定目标并读取相关数据的技术。这种技术利用射频信号及其空间耦合、传输特性,实现对静止或移动物品的自动识别。 RFID由以下2个部分组成&#xf…

NO5 蓝桥杯实践之矩阵键盘的使用(或许是一篇求助帖...)

1 任务 2 思路 视频中老师的思路写的代码过长,所以我想了个自己的思路,但是没完全跑出来,求大神指教!!!! 我的思路是首先将矩阵键盘的行和列对应的端口引脚分别存储在类似数组,然后…

Prompt Engineering(提示工程)

Prompt 工程简介 在近年来,大模型(Large Model)如GPT、BERT等在自然语言处理领域取得了巨大的成功。这些模型通过海量数据的训练,具备了强大的语言理解和生成能力。然而,要想充分发挥这些大模型的潜力,仅仅…

中小学生校服订购系统lw 微信小程序-python+java+node.js+php

作为一个校服订购系统,数据流量是非常大的,因而,系统的制定需要达到方便使用、实际操作灵便的规定。所以,在设计方案校服订购系统时,应完成下列总体目标: (1)页面应美观大方友善,查找应便捷方便…

二、TensorFlow结构分析(5)案例

案例: minimize(error) 代码: def linear_regression():# 自实现线性回归# 1)准备数据X tf.random.normal(shape[100,1])y_true tf.matmul(X,[[0.8]]) 0.7# 2)构造模型# 定义模型参数 用 变量weights tf.Variable(initial_v…

小明的背包——01背包问题

经典版 题目链接:1.小明的背包1 - 蓝桥云课 (lanqiao.cn) 01背包问题中,每种物品只有两种状态,即拿或不拿。设状态dp[i][j]max(dp[i-1][j],dp[i-1][j-w]v);如果不拿物品i,那么最大价值就是dp[i-1][j],如果…

基于YOLOv8深度学习的野外火焰烟雾检测系统【python源码+Pyqt5界面+数据集+训练代码】深度学习实战、目标检测

《博主简介》 小伙伴们好,我是阿旭。专注于人工智能、AIGC、python、计算机视觉相关分享研究。 ✌更多学习资源,可关注公-仲-hao:【阿旭算法与机器学习】,共同学习交流~ 👍感谢小伙伴们点赞、关注! 《------往期经典推…

【深度学习】YOLOv9继续训练——断点训练方法

YOLOv9继续训练主要分为两个情况: 其一、训练过程中意外中断,未完成训练预期的epoch数量; 其二、训练完了,但是未收敛,在这个基础上,还想用这个权重、学习率等参数继续训练多一些轮次 一、训练过程中意外…