LeetCode 206. Reverse Linked List

OpenClaw 企业级自动化系统架构设计与实现 本文介绍基于 OpenClaw 构建的企业级自动化系统的完整架构设计、技术选型、实现细节和性能优化方案。 阅读详情

206. Reverse Linked List
Reverse a singly linked list.
Hint:
A linked list can be reversed either iteratively or recursively. Could you implement both?

题意:逆置一个单链表。
提示:您能否使用迭代和递归两种方法?

/*  
    这个题我们可以利用三个指针:
    NULL 1 -> 2 -> 3 -> 4 -> 5
     ↑   ↑↑
     a   bc

    (1)c = b->next;               (2)b->next = a;               (3)a = b;                     (4)b = c;
    NULL 1 -> 2 -> 3 -> 4 -> 5    NULL <- 1  2 -> 3 -> 4 -> 5   NULL <- 1  2 -> 3 -> 4 -> 5   NULL <- 1  2 -> 3 -> 4 -> 5
     ↑   ↑    ↑                    ↑      ↑  ↑                         ↑↑  ↑                          ↑  ↑↑
     a   b    c                    a      b  c                         ab  c                          a  bc

    (1)c = b->next;               (2)b->next = a;               (3)a = b;                     (4)b = c;
    NULL <- 1  2 -> 3 -> 4 -> 5    NULL <- 1 <- 2  3 -> 4 -> 5   NULL <- 1 <- 2  3 -> 4 -> 5   NULL <- 1 <- 2  3 -> 4 -> 5
            ↑  ↑    ↑                      ↑    ↑  ↑                         ↑↑  ↑                          ↑  ↑↑
            a  b    c                      a    b  c                         ab  c                          a  bc     

    (1)c = b->next;               (2)b->next = a;               (3)a = b;                     (4)b = c;                  
    NULL <- 1 <- 2  3 -> 4 -> 5   NULL <- 1 <- 2 <- 3  4 -> 5    NULL <- 1 <- 2 <- 3  4 -> 5   NULL <- 1 <- 2 <- 3  4 -> 5
                 ↑  ↑    ↑                     ↑    ↑  ↑                          ↑↑  ↑                          ↑  ↑↑
                 a  b    c                     a    b  c                          ab  c                          a  bc          

    (1)c = b->next;               (2)b->next = a;               (3)a = b;                     (4)b = c;                  
    NULL <- 1 <- 2 <- 3  4 -> 5   NULL <- 1 <- 2 <- 3 <- 4  5    NULL <- 1 <- 2 <- 3 <- 4  5   NULL <- 1 <- 2 <- 3 <- 4  5
                      ↑  ↑    ↑                     ↑    ↑  ↑                          ↑↑  ↑                          ↑  ↑↑
                      a  b    c                     a    b  c                          ab  c                          a  bc  

    (1)c = b->next;               (2)b->next = a;               (3)a = b;                      (4)b = c;     
    NULL <- 1 <- 2 <- 3 <- 4  5   NULL <- 1 <- 2 <- 3 <- 4 <- 5  NULL <- 1 <- 2 <- 3 <- 4 <- 5  NULL <- 1 <- 2 <- 3 <- 4 <- 5
                           ↑  ↑ ↑                        ↑    ↑ ↑                           ↑↑ ↑                            ↑  ↑↑
                           a  b c                        a    b c                           ab c                            a  bc  

*/

ListNode* reverseList(ListNode* head) {
    if(head == NULL || head -> next == NULL) 
        return head;

    ListNode* first = NULL;
    ListNode* second = head;
    while(second != NULL){
        ListNode* third = second -> next;
        second -> next = first;
        first = second;
        second = third;
    }
    return first;
}

// 使代码更简洁,将参数名改为second
ListNode* reverseList(ListNode* second) {
    ListNode* first = NULL;
    while(second){
        ListNode* third = second -> next;
        second -> next = first;
        first = second;
        second = third;
    }
    return first;
}

下面我们考虑递归的方法:

/*  例如:
    1 -> 2 -> 3 -> 4 -> 5

    1. 1 -> 2 -> 3 -> 4 <- 5
    递归到最深处为 head = 5,返回后到 head = 4 处:
    newHead = 5;
    newTail = 4 -> next = 5;
    5 -> next = 4;
    4 -> next = NULL;
    return 5;

    2. 1 -> 2 -> 3 <- 4 <- 5
    从 head = 4 返回到 head = 3 处
    newHead = 5;
    newTail = head(3) -> next = 4;
    newTail(4) -> next = head(3);
    3 -> next = NULL;
    return 5;

    3. 1 -> 2 <- 3 <- 4 <- 5
    从 head = 3 返回到 head = 2处
    newHead = 5;
    newTail = head(2) -> next = 3;
    newTail(3) -> next = head(2);
    head(2) -> next = NULL;
    return 5;

    ...
-*/

ListNode* reverseList(ListNode* head) {
    if(head == NULL || head -> next == NULL) 
        return head;

    ListNode* newHead = reverseList(head -> next);  // 逆置head -> next作为新的头
    ListNode* newTail = head -> next;               // 新的尾节点为head -> next
    newTail -> next = head;                         // 将该节点逆置
    head -> next = NULL;
    return newHead;  // 返回新的头结点
}
黏菌算法(Slime Mould Algorithm,SMA) 这是一篇关于黏菌算法的总结博客,包含算法思想,算法步骤,求函数最值(Python实现),算法改进等,持续更新ing 阅读详情

相关推荐

tiny4412用 usb 连接计算机显示sec s5pc210 test b/d 解决方法

当我用USB线连接tiny4412的microUSB端口的时候,出现了驱动没有正常安装,显示“sec s5pc210 test b/d” 出现这种问题的原因有: 1、没有安装到正确的USB驱动; 2、SD卡没有插好 我出现问题的原因属于第二种,插入SD卡后,上电后,LCD屏亮了,但没有任何显示   解决方法是:     更换一张SD卡,重新插入开发板卡槽,上电开

karaskass的博客 3231

[Leetcode力扣 206] Reverse Linked List

一、题目描述 反转一个单链表。一道非常简单,非常基础的题,然而我某次面试竟然没写出来......所以在这里好好反思总结一下。 二、迭代法 以“1->2->3->4->5->nullptr”为例。 如果链表没有节点或者只有1个节点,那么直接返回即可,不需要做操作,所以最小规模的情况要2个节点。 从第2个节点开始迭代,每一次要将当前节点指向上一个head,并且要将head每次都更新为指向当前节点。除此之外还要注意,最开始的head指向的节点一定是尾节点,所以要把开始的

NiuYutao的博客 321

实测338MB/s!FPGA与CYUSB3014的Slave FIFO模式实战避坑(附完整固件与源码)

本文详细介绍了FPGA与CYUSB3014在Slave FIFO模式下实现338MB/s高速数据传输的实战经验。通过优化硬件设计、固件配置和GPIF II接口设置,解决了USB3.0双向通信中的关键性能瓶颈,并提供了完整的固件与源码参考。

weixin_30570101的博客 456

Leetcode 206 Reverse Linked List

题意描述 Reverse a singly linked list.反转链表是一个基础问题,但也是一个很重要的问题。 Example: Input: 1-&amp;gt;2-&amp;gt;3-&amp;gt;4-&amp;gt;5-&amp;gt;NULL Output: 5-&amp;gt;4-&amp;gt;3-&amp;gt;2-&amp;gt;1-&amp;gt;NULL 思路解析一 通过prev、cur、nex三个指

herosunly的博客 1万+

从报错到优化:一次Gauss JDBC参数限制排查实录(32767参数上限避坑指南)

本文详细记录了排查GaussDB JDBC驱动因绑定参数数量超过32767上限而抛出`PSQLException`(报错信息为`Tried to send an out-of-range integer as a 2-byte value`)的全过程。文章深入分析了该限制的底层协议原理,并提供了应用层分批查询、使用临时表以及优化业务逻辑等多种解决方案,旨在帮助开发者规避此参数上限陷阱,构建更稳健的数据访问层。

rgv23456789的博客 217

C++面向对象程序设计大作业:魔兽世界(三):开战

C++面向对象程序设计大作业:魔兽世界(三):开战问题描述问题分析代码 问题描述 问题来自于北京大学郭炜老师的C++慕课的大作业 魔兽世界的西面是红魔军的司令部,东面是蓝魔军的司令部。两个司令部之间是依次排列的若干城市,城市从西向东依次编号为1,2,3 … N ( N <= 20)。红魔军的司令部算作编号为0的城市,蓝魔军的司令部算作编号为N+1的城市。司令部有生命元,用于制造武士。 两军的司令部都会制造武士。武士一共有dragon 、ninja、iceman、lion、wolf 五种。每种武士都有

RedRum_1965的博客 4035

力扣Leetcode 206 | 反转链表(Reverse Linked List)

作者:ame-9 链接:https://leetcode-cn.com/problems/reverse-linked-list/solution/python3di-gui-jie-fa-zhu-yi-xu-xian-kuang-zai-shui/ 来源:力扣(LeetCode) 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。 在思考递归问题的时候,我们要从上到下思考: 子问题是什么 base case是什么 在当前层要干什么 对翻转链表来说,以1->2->3-&gt.

maoersong的专栏 243

【人工智能】Claude Code 安装、配置及问题排查完整指南

建议使用IDE来启动 Claude,执行后,内容如下。(确保环境可正常运行 npm 命令)。

奶爸的编程之路,也就一周冷个三天 1206

【LeetCode】206、反转链表 Reverse Linked List

【LeetCode】206、反转链表 Reverse Linked List 反转链表不用多说了吧,考的频率太大了。 一、题目描述 题目地址 https://leetcode-cn.com/problems/reverse-linked-list/ 二、小白代码 一如既往… /** * Definition for singly-linked list. * public class ListNode { * int val; * ListNode next; * Lis

Zangjiji的博客 530

大数据工程中的数据血缘分析工具比较

数据血缘(Data Lineage)是大数据治理中的核心组成部分,它描述了数据从源头到目标的完整流动路径。系统介绍数据血缘的核心概念和技术原理比较主流开源和商业数据血缘工具的功能特点提供数据血缘分析的实践指南和选型建议本文首先介绍数据血缘的基本概念,然后深入分析其技术原理和实现方法,接着比较主流工具的特点,最后通过实际案例展示应用场景。数据血缘(Data Lineage): 描述数据从源头到目标的完整流动路径,包括所有转换和处理步骤元数据(Metadata)

大数据洞察的博客 899

小论文/大论文必备 | RT-DETR目标检测、数据集增强 | 引入多种数据集增强方法,支持图像和标签同步扩充增强,助力小论文和大论文实验涨点策略,平均提升模型mAP约1-2个百分点

RT-DETR目标检测数据增强策略研究 ,本文针对RT-DETR目标检测模型提出9种数据增强方法,包括几何变换(水平/垂直翻转、中心裁剪)、光照调整(亮度、对比度)和噪声添加(高斯/椒盐噪声)等。所有增强操作均保持图像与标签同步变换,确保训练数据的准确性。实验表明,该策略可提升模型mAP 1-2个百分点,对小目标检测效果尤为显著。文中提供了完整的Python实现代码,支持批量处理图像和标签文件,并详细说明了各增强方法的功能特点。该方法通过提升数据多样性,有效增强了模型在复杂场景下的鲁棒性和泛化能力。

Ai缝合怪、助力小伙伴高效发论文 460

leetcode[206]Reverse Linked List

问题:反转单链表 输入:ListNode* head 输出:ListNode* head 思路:没有思路,只好看solution,学习一下。链表真的头大,指来指去。 https://www.jianshu.com/p/eae394437b47 做链表类题目的关键是画图,将链表指针指向的内存的变化用图表示出来。 设置虚拟头节点。头节点(head)常要特殊处理,因为head节点没有前一个节...

Black Mamba的博客 264

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

LeetCode206——Reverse Linked List

LeetCode206 —— Reverse Linked List 今天开始正式记录一下刷leetcode的题,当然是从easy开始慢慢刷,先做一些基础的字符串和链表什么的简单题去熟悉一下,然后慢慢再往后面做。这道题为啥要记录一下呢,虽然这是一道简单题,但是链表的题还是很生疏,脑子也不怎么转,所以就记录一下自己最初的解法和正常的较好的解法。 虽然知道可以一个循环直接完事,但是由于现在还是比较生疏...

qq_30650047的博客 341

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

leetcode (力扣)题解 206. Reverse Linked List (链表反转)

leetcode (力扣)题解 206. Reverse Linked List (链表反转) 题目:Reverse a singly linked list.(反转单链表) Example: Input: 1->2->3->4->5->NULL Output: 5->4->3->2->1->NULL Follow up: A linked list can be reversed either iteratively or recursivel

fgao2的博客 275

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

【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 206. Reverse Linked List

尽管是 easy 难度, 但是对于头插法的过程并没有很熟悉, 所以只能学习一下大神们的思路 : 头插法 : 建立带头结点的链表: class Solution { public ListNode reverseList(ListNode head) { ListNode newHead = new ListNode(-1); while(head ...

mrbm_lj的博客 282

LeetCode 206. Reverse Linked List 题解

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

cannonjinx的博客 4103

LeetCode 206 反转链表 Reverse Linked List Python

链表定义 # Definition for singly-linked list. class ListNode: def __init__(self, x): self.val = x self.next = None 206. 反转链表 Reverse Linked List LeetCodeCN 第206题链接 遍历链表,迭代前节点prev,缓存当前...

fongim的博客 270

LeetCode206:Reverse Linked List

Reverse a singly linked list. click to show more hints. Hint: A linked list can be reversed either iteratively or recursively. Could you implement both? 使用迭代和递归实现单链表的反转。 迭代的方法之间在剑指offer上面

2248

[LeetCode] 206. Reverse Linked List

题目内容 https://leetcode-cn.com/problems/reverse-linked-list/ Reverse a singly linked list. Example: Input: 1->2->3->4->5->NULL Output: 5->4->3->2->1->NULL 题目思路 这个就是基...

Reyiiiin的深夜一点半 107

LeetCode-206. Reverse Linked List

Description Solution 1(C++) /** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode(int x) : val(x), next(NULL) {} * }; */ class

zy2317878的博客 2975

leetcode: 206. Reverse Linked List

leetcode: 206. Reverse Linked List 方法一:双指针法,不创建新的链! /** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode() : val(0), next(nullptr) {} * ListNode(int x) : val(x), next(nullptr) {} *

LSK的博客 605

Leetcode_206_Reverse Linked List

本文是在学习中的总结,欢迎转载但请注明出处:http://blog.csdn.net/pistolove/article/details/45739753     Reverse a singly linked list. click to show more hints. Hint: A linked list can be reversed either iteratively or recursively. Could you implement both? 思

皮斯特劳沃 1638

NYUer | LeetCode206 Reverse Linked List

NYUer | LeetCode206 Reverse Linked List

Moses_SU的博客 454

Leetcode206. Reverse Linked List

单链表倒置。

magic_jiayu的博客 131
上一篇: LeetCode 160. Intersection of Two Linked Lists
下一篇: LeetCode 234. Palindrome Linked List
Spade_
博客等级 码龄10年 918粉丝 123原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值