[LeetCode]206. Reverse Linked List(反转单链表)

Linked 链表反转 - 迭代 与 递归 关于List 面试中经常会碰到,那这篇文章讲的就是关于List 中 LinkedList 的常问的链表算法 阅读详情

206. Reverse Linked List

Reverse a singly linked list.
反向单链表。
Hint:
A linked list can be reversed either iteratively or recursively. Could you implement both?
提示:
可以迭代或递归地颠倒链表

思路1:

  • 现将链表变成环,每次都将原第一个结点之后的那个结点放在新的表头后面,最后断开环。
  • 比如1,2,3,4,5 变成1,2,3,4,5->1(环)
  • 第一次:把第一个结点1后边的结点2放到新表头后面,变成2,1,3,4,5 ->2(环)
  • 第二次:把第一个结点1后边的结点3放到新表头后面,变成3,2,1,4,5 ->3(环)
  • 4,3,2,1,5 ->4(环)
  • 5,4,3,2,1 ->5(环)

    代码如下:

ListNode* reverseList(ListNode* head) {
        if(head == nullptr || head->next == nullptr)
            return head;
        ListNode* res;
        ListNode* first;
        ListNode* temp;
        res = new ListNode(-1);
        res->next = head; //将单链表变成环
        first = head;//指向原链表的头结点
        while(first->next != nullptr){
            temp = first->next;//指向即将处理的点
            first->next = temp->next;
            temp->next = res->next;
            res->next = temp;
        }
        head = res->next;
        res->next = nullptr;
        return head;
    }

思路2:

代码如下:

ListNode* reverseList(ListNode* head) {
        if(head == nullptr || head->next == nullptr)
            return head;
        ListNode* p;
        ListNode* q;
        ListNode* r;
        p = head;
        q = head->next;
        head->next = nullptr;//旧的头指针是新的尾指针 指向NULL
        while(q){
            r = q->next;//用来保存下一步要处理的指针
            q->next = p;//p q 交替处理 进行反转单链表
            p = q;
            q = r;
        }
        head = p;//最后的q必定指向NULL,p就成了新链表的头指针
        return head;
    }

思路3:

  • 递归,参考链接
  • 现在需要把A->B->C->D进行反转,
  • 可以先假设B->C->D已经反转好,已经成为了D->C->B,那么接下来要做的事情就是将D->C->B看成一个整体,让这个整体的next指向A,所以问题转化了反转B->C->D。那么,
  • 可以先假设C->D已经反转好,已经成为了D->C,那么接下来要做的事情就是将D->C看成一个整体,让这个整体的next指向B,所以问题转化了反转C->D。那么,
  • 可以先假设D(其实是D->NULL)已经反转好,已经成为了D(其实是head->D),那么接下来要做的事情就是将D(其实是head->D)看成一个整体,让这个整体的next指向C,所以问题转化了反转D。

代码如下:

ListNode* reverseList(ListNode* head) {
        if (!head || !(head -> next)) return head;
        ListNode* node = reverseList(head -> next);
        head -> next -> next = head;
        head -> next = NULL;
        return node; 
    }
List-LinkedList 单链表就地反转 List-LinkedList 单链表就地反转 的代码的一种实现。 立即下载

相关推荐

有关SPSS中Fisher精确检验无法进行的解决方法(由于无法打开临时文件,因此无法进行计算)

最近在帮一个四年生完成她的毕业论文,在用SPSS进行R×C表检验的时候,发现Fisher精确检验的结果无法显示,提示为“由于无法打开临时文件,因此无法进行计算”,大概像下图一样。 (这图是从网上找的) 然...

chuyang37的博客 3万+

链表Linked List-Reverse a Linked List反转链表的4种方法(3)

链表Linked List-Reverse a Linked List反转链表的4种方法(3)

weixin_45428910的博客 601

使用Anaconda和conda快速搭建YOLO开发环境

本文详细介绍了如何使用Anaconda和conda为YOLO目标检测项目快速搭建独立、纯净的开发环境。通过创建虚拟环境,有效解决了Python包版本冲突和CUDA兼容性问题,并指导安装GPU版PyTorch等核心依赖,最后通过验证脚本确保环境配置成功,为YOLO开发提供了稳定可靠的基础。

weixin_28829629的博客 161

206. Reverse Linked List 【反转链表】

描述 Reverse a singly linked list 例子 思路 因为要反转,所以就会断了当前结点和下一个结点的本来关系,所以要保留下一个结点xia 方法1 遍历链表,对于每个结点,先保留下一个结点的位置,然后采用头插法,将该结点插入新的链表,修改当前结点 时刻保存当前结点 方法2 遍历链表,对于每个结点,先保留下一个结点,然后,将head指向pre,修改pre和...

puspos的博客 255

Scratch(四十一):升级版垃圾分类

哈喽,大家好!之前给大家展示过“Scratch(二十四):垃圾分类”。今天呢,给大家展示的Scratch是`升级版垃圾分类`。接下来,我们一起看一下效果吧。

我可以很大侠的博客 6863

告别手动归档:基于Allegro Skill的XTools一键生成Gerber与生产文件实践

本文详细介绍了基于Allegro Skill的XTools工具如何实现一键生成Gerber与生产文件,大幅提升PCB设计效率。通过自动化流程,解决了传统手动归档中的重复劳动、人为失误和标准不统一等问题,特别适合需要频繁输出生产文件的工程师。文章包含安装配置、实战操作、问题排查及进阶技巧,帮助用户快速掌握这一高效工具。

weixin_30505225的博客 460

数据算法之反转链表(五种方法)

给你单链表的头节点 head ,请你反转链表,并返回反转后的链表。示例:输入:head = [1,2,3,4,5]输出:[5,4,3,2,1]这道题来自力扣的第206题,今天我们尝试使用五种不同的方法来实现链表的反转。

weixin_63834061的博客 6869

【电路设计】SERDES与pcie

明确通信接口需要达到什么样的数据速率、信号完整性以及系统中各个部件的互相作用。2.

数字人生 4563

LinkedList-反转链表

问题: 反转一个单链表。 输入: 1->2->3->4->5->NULL 输出: 5->4->3->2->1->NULL 解题思路:此题可以使用递归思想求解。首先还是写出递归终止条件。然后假设只差最后一步没有反转,如例子:1->2<-3<-4<-5,我们需要做的就只剩下将2指向1就可以了。 class Solution { public ListNode reverseList(ListNode

iversongzy的博客 966

YOLO11有效改进专栏目录

YOLO11改进专栏导航

A1983Z的博客 3674

Google Earth Engine(GEE)——将sentinel - 2影像所有波段重采样到10m分辨率 (resample 和 projection的使用)

影像重投影是将一个影像从一个坐标系投影到另一个坐标系的过程。这通常涉及到将像素从一个平面坐标系变换到另一个平面坐标系。这可以用于许多应用中,例如建立数字高程模型(DEM)和地图制图。影像重投影通常需要进行数学计算,包括转换矩阵和插值算法,以确保像素值的准确性和精度。这次我们将对哨兵2好数据中20m分辨率的波段,重采样到10m分辨率中,然后同一参与计算。

此星光明博客 3106

LeetCode 206. Reverse Linked List 反转单链表

1.题目 反转单链表 2.思路 1) nex 保存当前节点cur的下一个节点 2) cur 指向 前一个节点pre 3) pre = cur cur = nex 3.实现 class Solution { public: ListNode* reverseList(ListNode* head) { if(head == nullptr) ...

拾遗 243

AutoSAR配置与实践(基础篇)3.2 BSW中的I/O架构和模块详解

车门位置传感器(Sensor SWC)输出的电流信号经过了一系列处理,如先被转化为电压信号,后又经ADC转换为数字信号,但是IoHwAb模块对上层隐藏了这一系列处理过程,并将数据直接抽象为它的输出接口,即车门开关状态接口。Sensor SWC 使用RTE接口直接从IoHwAb模块封装的车门开关状态,SWC它并不关心ECU硬件是如何实现的传感器电流采集,也不关心MCU ADC采样精度(如10/12位)IoHwAb把采集的电压抽象为开关状态,使得Sensor SWC不依赖具体的ECU硬件。

nihaoljq2010的博客 1300

LeetCode:206. Reverse Linked List(单链表进行反转)

Reverse a singly linked list. Example: Input: 1-&gt;2-&gt;3-&gt;4-&gt;5-&gt;NULL Output: 5-&gt;4-&gt;3-&gt;2-&gt;1-&gt;NULL Follow up: A linked list can be reversed either iteratively or...

zy345293721的博客 478

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

leetcode——206 Reverse Linked List(单链表的反转)

解题思路: 反转一个单链表,其实就是要把指针的方向反一下而已。于是可以新建一个单链表,从前往后遍历参数链表的时候,新建一个单链表,从前往后遍历参数链表的时候,将每个节点插入新建链表的头部即可;

1039

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

LeetCode 206-Reverse Linked List(反转一个单链表)

题意:反转一个单链表。示例:输入: 1->2->3->4->5->NULL 输出: 5->4->3->2->1->NULL 进阶: 你可以迭代或递归地反转链表。你能否用两种方法解决这道题?分析:头插法。迭代:newhead为新链的头, 1、每次从原链head里取出链头,命名为now(待插入元素), 2、更新原链 3、将now,插入到newhead首部递归: 代码虽短,却很巧妙,见这

spring_3_shine的博客 1574

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

leetcode_206. Reverse Linked List 反转单链表

题目: Reverse a singly linked list. 题意: 将单链表反转 代码: # Definition for singly-linked list. # class ListNode(object): #     def __init__(self, x): #         self.val = x #         self.ne

qqzj_bupt的博客 495

[leetcode]206.反转单链表(Reverse Linked List )C++代码实现

1,题目描述 2,题目分析 参考博客:https://blog.csdn.net/qq_17550379/article/details/80647926 3,代码实现 /** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; *...

博客 327

LeetCode - 206. Reverse Linked List单链表反转(递归和非递归)(以及双向链表的反转)

单链表和双向链表的反转 单链表的反转 双向链表的反转 实现代码 单链表的反转 单链表的反转主要是利用两个辅助的结点pre 和 next 分别代表当前要处理的节点的前一个结点和后一个结点,然后通过改变结点的next域的指向来反转整个链表,通过循环处理,每次反转一个之后,pre指向下一个结点,也就是head,head更改为head的下一个结点,也就是next,这样直到head为空,返回...

zxzxin的博客~ 3007

【LeetCode-面试算法经典-Java实现】【206-Reverse Linked List(反转一个单链表)】

【206-Reverse Linked List(反转一个单链表)】【LeetCode-面试算法经典-Java实现】【所有题目目录索引】代码下载【https://github.com/Wang-Jun-Chao】原题  Reverse a singly linked list. 题目大意  反转单链表。 解题思路  使用头插法。 代码实现结点类public class ListNode {

https://github.com/Wang-Jun-Chao 5712

LeetCode 例题精讲 | 01 反转链表:如何轻松重构链表

本期例题:LeetCode 206 - Reverse Linked List(Easy) 反转一个单链表。 示例: 输入: 1->2->3->4->5->NULL 输出: 5->4->3->2->1->NULL 反转链表这道题是我在阿里的面试中遇到的题目。它本身也是单链表题目中非常典型的一道,不少题目的解法以反转链表为基...

nettee的专栏 343

刷题日记1-反转链表I

刷题日记1-反转链表I Leetcode 206 Reverse Linked List I Easy 剑指24 非常常见的题,有两个版本 I 和 II,II 在这里。 为了把原链表反转,我们要依次改变原链表中所有指针的方向。需要注意的是,每次改变指针方向的时候都会出现链表的断裂,如图中的红圈所示。 如图中所示,链表断裂后我们无法遍历到节点D,因此我们要在断裂之前将D保存下来。 因此我们需要使用三个指针: curr:当前遍历的节点 prev:当前遍历的节点的前一个节点 temp:当前遍历的节点的后一个节点

weixin_43753996的博客 213

leetcode-206-反转链表(reverse linked list)-java

题目及用例 package pid206; /*反转链表 反转一个单链表。 示例: 输入: 1-&gt;2-&gt;3-&gt;4-&gt;5-&gt;NULL 输出: 5-&gt;4-&gt;3-&gt;2-&gt;1-&gt;NULL 进阶: 你可以迭代或递归地反转链表。你能否用两种方法解决这道题? */ import pid206.LinkList; i

今天吃了吗的博客 560

LeetCode 206. Reverse Linked List 题解

本题是链表操作的经典问题。迭代方法:三个指针的使用递归方法:递归栈的利用指针反转的顺序通过本题可以深入理解链表操作的基本技巧。

cannonjinx的博客 4103

【LeetCode】206. Reverse Linked List 解题报告

转载请注明出处:http://blog.csdn.net/crazy1235/article/details/51820937Subject 出处:https://leetcode.com/problems/reverse-linked-list/ Reverse a singly linked list. Explain 反转单链表 Solutionsolution 1 最简单的方式

crazy_jack 3556

leetcode 206: Reverse Linked List

Reverse Linked List leetcode

西施豆腐渣 1万+
上一篇: [LeetCode]401. Binary Watch(二进制手表)
下一篇: [LeetCode]350. Intersection of Two Arrays II(求两个数组交集 II)
whl_program
博客等级 码龄11年 101粉丝 279原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值