[算法]实现单链表的反转

go语言实现单链表反转算法(附完整源码) 阅读详情

实现链表的反转


解题思路:

为了正确反转一个链表,需要调整指针的指向。举例说明,例如i,m,n是三个相邻的结点,假设经过若干步操作,已经把结点i之前的指针调整完毕,这些结点的next指针都指向前面一个结点。现在遍历到结点m,当然需要调整结点的next指针,让它指向结点i,但需要注意的是,一旦调整了指针的指向,链表就断开了,因为已经没有指针指向结点n,没有办法再遍历到结点n了,所以为了避免指针断开,需要在调整m的next之前要把n保存下来。接下来试着找到反转后链表的头结点。不难分析出翻转后链表的头结点是原始链表的尾结点,即next为空指针的结点。

实现代码如下:

/**
 * 两种方式实现单链表的反转
 * @author dream
 *
 */
public class ReverseSingleList {

    /**
     * 递归,在反转当前结点之前先反转后续结点
     * @param node
     * @return
     */
    public static Node reverse(Node head){
        if(head == null || head.getNextNode() == null){
            return head;
        }
        Node reversedHead = reverse(head.getNextNode());
        head.getNextNode().setNextNode(head);
        head.setNextNode(null);
        return reversedHead;
    }

    /**
     * 遍历,将当前结点的下一个结点缓存后更改当前结点
     */
    public static Node reverse2(Node head){
        if(head == null){
            return head;
        }
        Node pre = head;
        Node cur = head.getNextNode();
        Node next;
        while (cur != null) {
            next = cur.getNextNode();
            cur.setNextNode(pre);
            pre = cur;
            cur = next;
        }
        //将原链表的头结点的下一个结点置为null,再将反转后的头结点赋给head
        head.setNextNode(null);
        head = pre;
        return head;
    }
}

Github源码地址

https://github.com/GeniusVJR/Algorithm-and-Data-Structure/tree/master/实现链表的反转

android 面试算法题 实现单链表反转 面试题: 用代码实现单链表反转 然后打印出链表节点的ID 该算法的求解办法有非常多,如: 方法1:先顺序变量单链表,将结点保存到栈中,在从栈中弹出结点,又一次建立一个新的单链表; 方法2:用《剑指offer》里面给出的算法,用三个指针来实现; 方法3:採用递归实现,是方法2的递归实现形式。 本文主要给出方法2和方法3。在给出详细的代码之前,先要注意几个问题: (1)假设head为空,该怎样处理? (2)假设链表为单节点链表,该怎样处理? (3)怎样防止在反转过程中断链? (4)反转后head是否更新? (5 阅读详情

相关推荐

反转单链表算法的实现(Java)

首先,我们需要一个指针来存储当前节点,一个指针来存储前一个节点,以及一个指针来保存下一个节点的引用。我们将依次遍历原链表的每个节点,并将它的 next 指针指向前一个节点。最终,我们将头指针指向最后一个节点,完成链表的反转。该算法的时间复杂度为 O(n),其中 n 是链表的长度,因为我们需要遍历整个链表一次。空间复杂度为 O(1),因为我们只使用了几个额外的指针来辅助反转操作,并没有使用额外的数据结构。单链表由一个个节点组成,每个节点包含存储的数据和指向下一个节点的指针。方法中,我们创建了一个示例链表。

2301_79365003的博客 180

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

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

weixin_63834061的博客 6869

C语言实现单链表反转算法

首先,我们定义了一个节点结构体,其中包含一个整数值和一个指向下一个节点的指针。然后,我们提供了一个函数用于遍历并打印链表,这有助于我们验证操作是否正确。接着,我们提供了一个函数用于反转链表,它使用三个指针分别记录当前节点、前一个节点和临时节点,并通过循环迭代将当前节点的指针指向前一个节点。最后,我们在主函数中创建一个简单的单链表,逆置后输出结果。实现单链表的逆置操作是一项常见的任务,具有很高的实用价值。通过以上代码,您可以学习到如何实现单链表的逆置操作,并对此进行深入的探究和理解。

techDM的博客 165

【基础算法】反转链表的三种方法

【基础算法】反转链表的三种方法

4346

5G MBS(组播广播服务)深度解析:从标准架构到商用实践

5G MBS(组播广播服务)深度解析:从标准架构到商用实践

大家好,我是码农老gou,一名专注于编程技术的程序员。在这个博客中,我将与大家分享我在工作和学习中的经验、见解以及一些实用的技术干货。 1080

MMSegmentation 安装教程,避免mmcv不合适版本,及相关问题解决

都行,不做要求。

qq_43683133的博客 1218

【算法】反转链表的四种方法(C语言)

新建链表法,递归,迭代,原地反转。

Patrick_yuxuan的博客 1万+

并行计算:从概念起源到多层次架构设计及其发展历程的全面解析

20世纪70年代,第一台并行计算机于1972年产生(ILLIAC IV,伊利诺依大学),由64个处理器组成,可扩展性好,但可编程性差。如有21亩地需要除草,一个人一天只能除一亩地的草,那么需要21天才能除完草,这在现实中是不太可能的,因庄稼是有时间段的。其二是机群系统是高性能计算机的一种,它的技术基础和工业基础都是商品化和标准化。之所以称为“专用”,并不是说它们只能运行某种应用,是指它们的组成部件是专门设计的,它们的CPU板、内存板和I/O板,甚至操作系统,都是不能在其它系统中使用的。

1654

单链表的就地反转

设计一个将输入数据建立成链表、输出链表数据、利用原空间把链表反转的程序,熟练掌握线性表在链式存储结构下的基本操作。2.写出该算法并编辑成C程序;1.分析单链表就地反转;4.总结与编写实验报告。学会链表的基本操作。

m0_62776884的博客 478

Langfuse落地教程:从Docker部署到项目接入,掌控LLM调用链路

大模型应用开发中,调用链路的透明度直接决定调试效率与成本控制。可观测性技术通过记录每次请求的输入、输出、模型参数与Token消耗,帮助开发者快速定位问题。Langfuse作为开源LLM可观测性平台,将Trace、Prompt版本管理、评分等能力集成于一体,支持Docker Compose自托管部署,并提供Python/JS SDK与REST API。借助部署后的控制台,团队能够直观追踪RAG检索、Agent工具调用等复杂流程中的每一步耗时与资源占用,实现从黑盒调用到全链路可视化的转变。无论是本地调试、线上排

weixin_29698641的博客 308

YOLOv8改进 | 融合篇,YOLOv8改进主干网络为MobileNetV3+CA注意机制+添加小目标检测层(全网独家首发,实现极限涨点)

小目标检测难点众多,导致很多算法对小目标的检测效果远不如大中型目标。影响算法性能的主要原因如下:第一,小目标分辨率低、信息量不足,导致神经网络提取到的有效特征较少。第二,小目标在图像中所占的区域较小,易受背景干扰,这对算法的定位性能要求较高。第三,小物体标注困难,训练数据有限,导致模型泛化能力差。例如多尺度学习、无锚机制和生成对抗学习等方法,都能提高小目标检测的准确性和鲁棒性。为了改善小目标漏检现象严重的问题,我在 YOLOv8 中增加了 P2 检测头,相当于有四个检测头,使网络能检测到更小的目标。

在职AI算法工程师,擅长计算机视觉,YOLO目标检测、分割等,擅长web、pyqt界面可视化,好内容持续更新中,来这里跟大家一起学习,共同进步 2857

逆转链表的三种方法

逆转链表的三种方法,C语言

m0_56332819的博客 751

面经-2023-联发科MTK-数字芯片设计

面经-2023-联发科MTK-数字芯片设计

w0shishabi的博客 2943

一些常用算法[数组全排列算法,单链表反转(递归实现),字符串反转,桶排序]

using System; using System.Collections; using System.Collections.Generic; namespace Arrange { class Program { static void Main(string[] args) { #region 1。全排列算法

mrliming的专栏 2022

基于Simulink的固态变压器(SST)多级协同控制

本文基于Simulink平台,详细介绍了固态变压器(SST)多级协同控制的建模与仿真方法。针对SST三级架构(AC-DC、DC-DC、DC-AC)存在的级间耦合问题,提出了纵向解耦与横向联动的协同控制策略。通过搭建10kV/400V级联型SST系统模型,实现了输入电压波动±20%或负载0-100%跳变时直流母线电压波动小于2%的控制目标。文章详细讲解了Simulink建模步骤、控制算法推导及工程部署建议,包括功率前馈控制、虚拟惯性算法等关键技术。仿真结果表明,该协同控制方案能有效抑制负载突变时的电压波动,为

MHD0815的博客 214

17. ADC开发

bes2700 支持2路ADC。

雪飞_海 340

Java:实现反转一个单链表算法(附带源码)

Java:实现反转一个单链表算法(附带源码)

欢迎来到我的博客!这里是一个专注于计算机技术的分享平台,涵盖编程开发、算法研究、系统架构、软件工程等多个领域。无论你是初学者还是资深开发者,都能在这里找到有价值的内容。 918

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

数据结构与算法——实现单链表反转

如何实现单链表反转 方法一:就地逆序 在遍历链表的时候,修改当前结点的指针域的指向,让其指向它的前驱结点。为此需要用一个指针变量保存前驱结点的地址。此外,为了在调整当前结点指针域的指向后还能找到后继结点,还需要另外一个指针变量来保存后继结点的地址。除此之外,还需要特别注意对链表首尾结点的特殊处理 struct ListNode { int val; ListNode *next; ListNode() : val(0), next(nullptr) {} ListNode(i

beilizhang的博客 542

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

python3 单链表_Python3实现的反转单链表算法示例

本文实例讲述了Python3实现的反转单链表算法。分享给大家供大家参考,具体如下:反转一个单链表。方案一:迭代# Definition for singly-linked list.# class ListNode:# def __init__(self, x):# self.val = x# self.next = Noneclass Solution:def reverse...

weixin_39989384的博客 141

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

反转单链表的四种算法实现

本节带领大家研究一个和单链表有关的问题,即如何实现单链表的反转。 反转链表,又可以称为翻转或逆置链表,它们表达的是同一个意思。以图 1 所示的链表为例: 图 1 未反转的链表 经过反转(翻转、逆置)后,得到的新链表如图 2 所示: 图 2 反转后的链表 通过对比图 1 和 图 2 中的链表不难得知,所谓反转链表,就是将链表整体“反过来”,将头变成尾、尾变成头。那么,如何实现链表的反转呢? 常用的实现方案有 4 种,这里分别将它们称为迭代反转法、递归反转法、就地逆置法和头插...

XJX_ai_dai的博客 374

转载:单链表反转详解(4种算法实现)

转载:单链表反转详解(4种算法实现) http://c.biancheng.net/view/8105.html

linghao3141的博客 229

Reverse反转算法+斐波那契数列递归+Reverse反转单链表算法--C++实现

Reverse反转算法 1 #include <iostream> 2 3 using namespace std; 4 //交换的函数 5 void replaced(int &a,int &b){ 6 int t = a; 7 a = b; 8 b = t; 9 } 10 //反转 11 void re...

weixin_34413065的博客 118

单链表反转的算法实现与验证:从基础原理到高效实践

基于火山引擎豆包大模型,从零搭建一个实时语音通话应用。它不是简单的问答,而是需要你亲手打通 ASR(语音识别)→ LLM(大脑思考)→ TTS(语音合成)的完整 WebSocket 链路。对于想要掌握 AI 原生应用架构的同学来说,这是个绝佳的练手项目。架构理解:掌握实时语音应用的完整技术链路(ASR→LLM→TTS)技能提升:学会申请、配置与调用火山引擎AI服务定制能力:通过代码修改自定义角色性格与音色,实现“从使用到创造”从0到1构建生产级别应用,脱离Demo,点击打开。

2600_94960106的博客 317

python实现反转链表讲解_Python3实现的反转单链表算法示例

本文实例讲述了python3实现的反转单链表算法。分享给大家供大家参考,具体如下:反转一个单链表。方案一:迭代# definition for singly-linked list.# class listnode:# def __init__(self, x):# self.val = x# self.next = noneclass solution:def reverse...

weixin_39976748的博客 266

单链表反转实战:从算法原理到工业级实现

基于火山引擎豆包大模型,从零搭建一个实时语音通话应用。它不是简单的问答,而是需要你亲手打通 ASR(语音识别)→ LLM(大脑思考)→ TTS(语音合成)的完整 WebSocket 链路。对于想要掌握 AI 原生应用架构的同学来说,这是个绝佳的练手项目。架构理解:掌握实时语音应用的完整技术链路(ASR→LLM→TTS)技能提升:学会申请、配置与调用火山引擎AI服务定制能力:通过代码修改自定义角色性格与音色,实现“从使用到创造”从0到1构建生产级别应用,脱离Demo,点击打开。

2600_94960059的博客 648

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

【092-Reverse Linked List II(反转单链表II)】【LeetCode-面试算法经典-Java实现】【所有题目目录索引】原题  Reverse a linked list from position m to n. Do it in-place and in one-pass.   For example:   Given 1->2->3->4->5->NULL, m =

https://github.com/Wang-Jun-Chao 2812
上一篇: [算法]找出单链表中的倒数第k个元素
下一篇: [算法]判断一个链表是否有环
陶程
博客等级 码龄12年 360粉丝 56原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值