Java 算法篇-深入了解单链表的反转(实现:用 5 种方式来具体实现)

基于Java实现单链表反转的多种方法 基于Java实现单链表反转的多种方法一、原地反转二、新建链表头结点插法三、利用栈结构实现链表的反转四、完整代码奉上 对于单链表不熟悉的可以看一下基于Java实现单链表的增删改查 一、原地反转 1、新建一个哨兵节点下一结点指向头结点 2、把待反转链表的下一节点插入到哨兵节点的下一节点 反转之前的链表:1–>2–>3–>4>–>5 加入哨兵节点:dummp–>1–>2–>3–>4>–>5 原地反转: 定义:prev=dummp.next; 阅读详情
AI摘要

本文详细介绍了在Java中实现单链表反转的五种方法:循环复制、头插法、递归法、三指针法以及第二种头插法,通过实例代码展示了每种方法的工作原理和实现过程。

🔥博客主页: 小扳_-优快云博客
❤感谢大家点赞👍收藏⭐评论✍
  

 

 

 

文章目录

        1.0 单链表的反转说明

        2.0 单链表的创建

        3.0 实现单链表反转的五种方法

        3.1 实现单链表反转 - 循环复制(迭代法)

        3.2 实现单链表反转 - 头插法

        3.3 实现单链表反转 - 递归法

        3.4 实现单链表反转 - 三指针法

        3.5 实现单链表反转 - 第二种头插法

        4.0 实现单链表反转的五种完整代码


        1.0 单链表的反转说明

        单链表的反转是指将链表中的节点顺序逆转,即原先的链表尾部变成了头部,头部变成了尾部。比如,[1,2,3,4,5,6,7] 将这个链表的值反转得到的结果为:[7,6,5,4,3,2,1],需要注意的是,可以用值打印出来会更好观察链表反转后的结果。

        2.0 单链表的创建

        具体的创建思路:首先要把节点进行封装成单独的类,该类中的成员包括:int value 存放值,Node next 引用下一个节点。由于该节点类为链表中的一个组成部分,因此,将该类设为静态内部类,外部类的成员为哨兵节点。

代码如下:

import java.util.Iterator;

public class Linked implements Iterable<Integer>{
    private final Node hand;
    private int size;
    static class Node {
        public int value;
        public Node next;

        public Node(int value, Node next) {
            this.value = value;
            this.next = next;
        }
    }

    public Linked() {
        hand = new Node(0,null);
    }

    public void addLast (int value) {
        Node p = hand;
        while (p.next != null) {
            p = p.next;
        }
        p.next = new Node(value, null);
        size++;
    }
    public void addFirst(int value) {
        hand.next = new Node(value,hand.next);
        size++;
    }

    @Override
    public Iterator<Integer> iterator() {
        return new Iterator<Integer>() {
            Node p = hand.next;

            @Override
            public boolean hasNext() {

                return p != null;
            }

            @Override
            public Integer next() {
                int k = p.value;
                p = p.next;
                return k;
            }
        };

    }

}

        为了方便对反转的五种方法进行讲解,实现了以上的头插节点、尾插节点、用迭代器循环节点的值。

本篇重点是反转的五种的方法,所以对以上的实现的 API 不太了解的话,点击以下链接去了解一下:   Java 数据结构篇-实现单链表核心API-优快云博客

        3.0 实现单链表反转的五种方法

        迭代法:遍历链表,依次改变节点的指针方向,使其指向前一个节点。

        递归法:利用递归函数,先反转后续节点,然后再将当前节点的指针指向前一个节点。

        头插法:从头到尾遍历原链表,依次将每个节点插入到新链表的头部,形成新的反转链表。

        栈:利用栈的特性,将链表节点依次入栈,然后依次出栈构建新的反转链表。

        三指针法:使用三个指针分别指向当前节点、前一个节点和后一个节点,依次改变节点的指针方向,实现链表的反转。

        3.1 实现单链表反转 - 循环复制(迭代法)

        思路为:遍历旧的链表来取得每个节点的对应的值,然后新链表根据得到的值来创建节点进行头插节点,这样就实现了链表反转了。需要注意的是,这个方法并没有改变旧链表。

代码如下:

    //方法一: 循环复制
    public Linked reverseMethod1 (Linked linked) {
        Linked linked1 = new Linked();
        for (Integer integer : linked) {
            linked1.addFirst(integer);
        }
        return linked1;
    }

        分析以上代码:先创建一个新链表 linked1 然后调用头插节点的方法,通过传入旧节点的值来创建对象,也就是节点。需要注意的是,这里的增强 for 循环是已经实现了。

        3.2 实现单链表反转 - 头插法

        通过改变旧节点的节点指向来实现链表反转,当反转结束之后,旧的链表顺序就会被改变。具体思路:先要对旧节点的 hand.next 头节点从该链表独立出来,对于旧链表来说就是删除头节点,不过要记录要删除的节点,得到这个头节点之后,该节点头插到新的链表中,一直循环往复下去,直到 hand.next == null 结束循环。

        对于这个链表来说,这就可以把 remove 这个节点删除了,也为头删节点。当 hand.next = null 就说明了没有节点了,就应该结束循环了。

        这就是头插节点的流程。

代码如下:

    //方法二: 改变旧节点的指向
    public Linked reverseMethod2(Linked linked) {

        Linked linkedNew = new Linked();
        Node handNew = linkedNew.hand;
        while (hand.next != null) {

            //先头删
            Node temp = linked.hand.next;
            linked.hand.next = temp.next;
            //再头插
            Node tp = handNew.next;
            handNew.next = temp;
            temp.next = tp;
        }
        return linkedNew;
    }

对以上代码进行分析:

         先创建一个新的链表,在删除头节点前,需要将要删除的节点记录起来,如果一个对象没被引用就会被 JVM 自动回收,然后头节点指向删除节点的指向下一个的节点。头插节点前,需要将 hand.next 同样要记录,然后头节点指向新的节点,新的节点的下一个节点,正就是原先的 hand.next 。

        3.3 实现单链表反转 - 递归法

         思路:通过递归这种方式,先递出到 “底” ,得到旧链表的最后一个节点,所以递归结束的条件也就是 temp.next == null,返回该节点 temp 也就是最后的节点。递归的函数也很容易可以想出来为: 调用自己的方法名(node.next) 。

代码如下:

    //方法三: 递归
    public Linked reverseMethod3(Linked linked) {
        Linked linked1 = new Linked();
        linked1.hand.next = reversion(linked.hand.next);
        return linked1;
    }

    public Node reversion (Node node) {
        if (node == null || node.next == null) {
            return node;
        }
        Node last = reversion(node.next);
        node.next.next = node;
        node.next = null;
        return last;
    }

        对以上代码进行分析:先创建一个新的链表 linkded1 ,调用 reversion()  这个方法来得到头节点。具体来看是如何得到头节点,显而易见,就是通过递归,递到底(到尽头)取到最后一个节点,然后将这个尾节点一直返回出来,OK,这里就拿到了新链表的头节点了。接下来要考虑的是,如何将剩下的节点反转呢?

 先来看看递归的流程图:

     

分析如下:  

        假设有五个节点,在递归回归的过程中,需要做的事第五个节点指向第四个节点,第四个节点指向第三个节点...一直下去,这样是不是就实现了每个节点指向都反转了。但是需要注意的是,当第二个节点指向第一个节点,这里都没有问题,我们很容易会忽略,第一个节点原先就指向第二个节点,因此,会出现死循环,解决办法:先暂时将被指向的节点赋值为:null ,这样就完美解决了。

        3.4 实现单链表反转 - 三指针法

        实现思路:在原先链表中进行改变每个节点的引用,先定义出三个变量分别为 o1,o2,n1,一开始的时候 o1 , n1指向链表中的 hand 头节点(先来搞定没有哨兵的链表),对于 o2 指向 hand.next 。接下来就可以开始移动 o2,n1 这个两个指针了,主要的是 o1 保持不变,永远指向 hand 节点,先让 hand.next = o2.next ,这个意思就是将 hand.next 的头节点的下一个节点从链表中移出,然后将移出来的节点指向 n1 ,最后 o2 = n1 将 n1 赋值给 o2 ,o2 再接着指向 hand.next 的节点。

几个简单的过程:

代码如下:

    //方法四:双引用
    public Linked reverseMethod4(Linked linked) {
        linked.hand.next = dualPointers(linked.hand.next);
        return linked;
    }

    public Node dualPointers(Node hand) {
        Node o1 = hand;
        Node n1 = hand;
        Node o2 = o1.next;
        while (o2 != null) {
            o1.next = o2.next;
            o2.next = n1;
            n1 = o2;
            o2 = o1.next;
        }
        return n1;
    }

        通过以上的简单几个过程且结合代码来分析,应该会有一点点感觉,来总结以下,对于 o1 的动作就是站在 hand 节点中 "一动不动", 对于 o2 可以将它看作搬运工,不断搬运 hand.next 的节点运到 n1 节点的前面(n1 的左边),具体就是先要将 o2.next 节点被 hand.next 引用,接着就是搬运了, o2.next 指向 n1 的节点,然后 n1 需要往后跳一格(往左边移动一个节点)即将 o2 赋值给 n1,然后 o2 就返回去指向 o1.next 的节点了,循环往复下去,直到当 o1.next == null 时,就该结束循环了。

        3.5 实现单链表反转 - 第二种头插法

        思路:遍历旧链表的每一个节点,然后直接插入到新链表中,这个方法个第一种头插很相似,区别就是第一种头插的方法是面向对象编程的,第二种头插的方法是面向过程来编程的。

代码如下:

    //方法五:
    public Linked reverseMethod5(Linked linked) {
        Node o1 = linked.hand.next;
        Linked linked1 = new Linked();
        Node n1 = null;
        while (o1 != null) {
            Node temp = o1.next;
            o1.next = n1;
            n1 = o1;
            o1 = temp;
        }
       linked1.hand.next = n1;
        return linked1;
    }

        这里也运用到了头删还有头插,跟之前的头插有所不同,这里的头插是将插入进来的节点变成为新链表的头节点,直到遍历结束为止。

        4.0 实现单链表反转的五种完整代码

import java.util.Iterator;

public class Linked implements Iterable<Integer>{
    public Node hand;
    private int size;
    static class Node {
        public int value;
        public Node next;

        public Node(int value, Node next) {
            this.value = value;
            this.next = next;
        }
    }

    public Linked() {
        hand = new Node(0,null);
    }

    public void addLast (int value) {
        Node p = hand;
        while (p.next != null) {
            p = p.next;
        }
        p.next = new Node(value, null);
        size++;
    }
    public void addFirst(int value) {
        hand.next = new Node(value,hand.next);
        size++;
    }

    @Override
    public Iterator<Integer> iterator() {
        return new Iterator<Integer>() {
            Node p = hand.next;

            @Override
            public boolean hasNext() {

                return p != null;
            }

            @Override
            public Integer next() {
                int k = p.value;
                p = p.next;
                return k;
            }
        };

    }



    //方法一: 循环复制
    public Linked reverseMethod1 (Linked linked) {
        Linked linked1 = new Linked();
        for (Integer integer : linked) {
            linked1.addFirst(integer);
        }
        return linked1;
    }

    //方法二: 改变旧节点的指向
    public Linked reverseMethod2(Linked linked) {

        Linked linkedNew = new Linked();
        Node handNew = linkedNew.hand;
        while (hand.next != null) {

            //先头删
            Node temp = linked.hand.next;
            linked.hand.next = temp.next;
            //再头插
            Node tp = handNew.next;
            handNew.next = temp;
            temp.next = tp;
        }
        return linkedNew;
    }

    //方法三: 递归
    public Linked reverseMethod3(Linked linked) {
        Linked linked1 = new Linked();
        linked1.hand.next = reversion(linked.hand.next);
        return linked1;
    }

    public Node reversion (Node node) {
        if (node == null || node.next == null) {
            return node;
        }
        Node last = reversion(node.next);
        node.next.next = node;
        node.next = null;
        return last;
    }

    //方法四:双引用
    public Linked reverseMethod4(Linked linked) {
        linked.hand.next = dualPointers(linked.hand.next);
        return linked;
    }

    public Node dualPointers(Node hand) {
        Node o1 = hand;
        Node n1 = hand;
        Node o2 = o1.next;
        while (o2 != null) {
            o1.next = o2.next;
            o2.next = n1;
            n1 = o2;
            o2 = o1.next;
        }
        return n1;
    }

    //方法五:
    public Linked reverseMethod5(Linked linked) {
        Node o1 = linked.hand.next;
        Linked linked1 = new Linked();
        Node n1 = null;
        while (o1 != null) {
            Node temp = o1.next;
            o1.next = n1;
            n1 = o1;
            o1 = temp;
        }
       linked1.hand.next = n1;
        return linked1;
    }

}

 

Java进阶 —— 面试必备 Java单链表反转 基本思路是:将当前节点cur的下一个节点 cur.getNext()缓存到temp后,然后更改当前节点指针指向上一结点pre。在反转当前节点之前先反转后续节点。这样从头结点开始,层层深入直到尾结点才开始反转指针域的指向。递归反转法是从后往前逆序反转指针域的指向,而遍历反转法是从前往后反转各个结点的指针域的指向。所谓的链表就好像火车车厢一样,从火车头开始,每一节车厢之后都连着后一节车厢。①链表通过每个结点的链域将线性表的n个结点按其逻辑顺序链接在一起的。上面就是两种方式反转单链表。 阅读详情

相关推荐

单链表反转两种方法

最近同学介绍了一个lettcode(力扣)OJ给我,个人认为这个网站比母校的oj,杭电oj界面友好很多,题库充足,且支持多种主流语言,很适合闲时刷刷提高算法能力,算法的练习如同内功的修炼,碰到算法问题,经常有一种无力感,只能慢慢总结了。 链表是一种重要的数据结构,因为有递归性质,所以总是难以理解,涉及链表的复杂操作总是感觉一头雾水,看别人的实现代码总是似懂非懂,看完就忘,实际上就是没有理解透彻,特...

Super小龙的博客 10万+

【算法练习】4种反转链表的方法(Java实现)

几种链表反转方法的主要区别在于迭代法和递归法是在原链表上直接反转,无需额外空间;而头插法和栈辅助需要 O(N) 的额外空间。一般迭代法代码最简洁,递归法需要处理终止条件,但思路清晰。

软件工程探索之旅 6715

Java单链表和双链表的反转及实现队列、栈和双端队列

算法与数据结构基础:介绍单链表和双链表结构、链表反转及实现队列、栈和双端队列

DreamsArchitects的博客 1805

Java - 反转链表

算法基础-反转链表

分数没二舅血压高 6318

JAVA 中实现用递归实现反转链表

Solution` 类中的 `reverseList` 方法是一个递归函数,它接收链表的头节点作为参数,并返回反转后的链表的头节点。在实际应用中,如果链表较长,通常使用迭代方法来实现链表反转,因为迭代方法的空间复杂度为O(1),而递归方法的空间复杂度为O(N)。在 `main` 方法中,我们创建了一个简单的链表,包含四个节点,然后调用 `reverseList` 方法进行反转,并打印出反转后的链表。3. 在递归函数中,处理当前节点的下一个节点,然后将当前节点的下一个节点设置为递归调用的结果。

wjianwei666的专栏 486

LCD驱动芯片——BL55072A驱动程序

初始化子程序: START 0x7C; I2C子地址 0xEA;ICSET,软件复位芯片 0xC0;MODSET,关显示 0xF0;BLKCTL,关闪烁 0xA3;DISCTL,80Hz Line inversion,High Power mode 0xE8;ICSET,清复位bit1 STOP 显示刷新子程序: START 0x7C;I2C子地址 0xF0;BLKCTL,关闪烁 0xA3;DISCTL,80Hz Line inversion,High Power mode 0xE8或0xEC;ICSE

love421的博客 3175

Java单链表反转 详细过程

https://blog.youkuaiyun.com/guyuealian/article/details/51119499 (一)单链表的结点结构:       data域:存储数据元素信息的域称为数据域;     next域:存储直接后继位置的域称为指针域,它是存放结点的直接后继的地址(位置)的指针域(链域)。    dat...

qq_32534441的博客 2万+

halcon与c#联合编程实现相机控制+图像平移缩放+日志记录+缺陷检测+路径规划

halcon与c#联合编程实现相机控制+图像平移缩放+日志记录+缺陷检测+路径规划 前言 本人近期在工作中遇到需要对某场景下利用海康相机进行图像缺陷检测与对应路径规划。通过对海康相机示例代码进行吸收与借鉴,最终实现了对海康相机的控制,并增加HSmartWindowControl控件,实现图像的实时显示与平移缩放功能;通过listview+toolstrip实现日志显示与类型(提示、警告、错误)分类;同时自行编制算法实现对缺陷的识别以及缺陷外扩矩形范围内的路径规划。 1.日志记录 代码如下(示例):

weixin_37864926的博客 2717

java中如何实现单链表反转

1.准备链表准备一个由DataNode组成的单向链表,DataNode如下:csharp 代码解读复制代码构造链表ini 代码解读复制代码public class DataChain {运行main方法,即构造了一个包含10个node节点的单链表。rust 代码解读复制代码#运行结果2.通过递归实现单链表反转考虑到代码的简洁性,首先考虑的是通过递归实现。java 代码解读复制代码 /**

pantouyuchiyu的博客 1309

Eureka自我保护机制

Eureka自我保护机制 默认情况下,当eureka server在一定时间内没有收到实例的心跳,便会把该实例从注册表中删除(默认是90秒),但是,如果短时间内丢失大量的实例心跳,便会触发eureka server的自我保护机制,比如在开发测试时,需要频繁地重启微服务实例,但是我们很少会把eureka server一起重启(因为在开发过程中不会修改eureka注册中心),当一分钟内收到的心跳数大量减少时,会触发该保护机制。可以在eureka管理界面看到Renews threshold和Renews(last

Soul_Ming的博客 543

嵌入式开发必备:aarch64-linux-gnu-gcc交叉编译工具链保姆级安装指南(含常见错误解决)

本文详细介绍了aarch64-linux-gnu-gcc交叉编译工具链的安装与配置方法,涵盖从系统软件源安装到Linaro二进制包部署的全流程。针对嵌入式开发中常见的依赖错误、版本冲突等问题提供实用解决方案,并分享性能优化技巧与项目集成经验,帮助开发者高效完成ARM64设备的跨平台开发。

yoga7的博客 1030

【算法】如何反转一个单链表?如何两两反转?

如何反转单链表?如何使用较少的遍历次数完成单链表的反转? 问题一、反转单链表题目:定义一个函数,输入一个链表的头结点,反转该链表并输出反转后链表的头结点。链表结点定义如下,这里使用的是Java描述:public class ListNode { int val; ListNode next; ListNode(int x) { val = x; } }思路如何把一个单链表进行

Mlib 4535

ROS2中间件选型指南:FastDDS与CycloneDDS零拷贝机制对比与实战

在机器人开发中,通信中间件是连接分布式节点的核心纽带,其性能直接影响系统的实时性与可靠性。DDS作为ROS2默认的通信标准,通过发布订阅模型和QoS策略,为高频大带宽场景提供了灵活的数据分发能力。并行计算与高性能传输的需求,推动了零拷贝技术的演进——从传统序列化到共享内存乃至指针传递,旨在减少数据复制开销、降低延迟。在激光雷达点云、相机图像等场景下,中间件的选型尤为关键。FastDDS凭借与ROS2的深度集成和丰富文档成为入门首选,而CycloneDDS在低延迟和资源占用上表现更优,借助iceoryx实现了

weixin_28726391的博客 254

java 链表反转_LeetCode206 实现单链表的反转

LeetCode206 实现单链表的反转LeetCode 码,码不停题1.题目介绍Reverse a singly linked list.Example:Input:1->2->3->4->5->NULLOutput:5->4->3->2->1->NULL2.实现方式就地反转法新建链表,头节点插入法递归反转法3.代码实现不啰嗦,直接看代...

weixin_39958025的博客 165

【天气雷达】双偏振产品-差分传播相移KDP详解

双偏振产品-差分传播相移KDP详解。

珞瑜的博客 2662

C#实战大华智能安防系统:从SDK封装到视频流与智能报警的全链路落地

本文将介绍C#集成大华SDK开发安防系统的实战经验,重点解决多路视频预览卡顿和报警延迟问题。文章通过三层架构设计(SDK封装层、业务服务层、应用层)实现解耦,详细分析线程安全封装、高效解码显示和智能事件联动等核心技术。针对16路摄像头同时预览时CPU占用率过高的问题,提出使用子码流拉流与异步解码的优化方案,并总结8个常见开发陷阱的解决方案。文中还提供了大华智能安防系统的完整架构图,展示从设备层到应用层的交互流程,特别强调业务服务层中视频流服务和智能报警服务的核心功能设计。

这里只有干货:从 Modbus 通信到 MES 对接,从 YOLO 训练到工控机部署,带你搞定工业软件开发全流程。 432

反转单链表,Java头插法实现

/** * 反转单链表 */ public class ReverseListNode { /** * 反转单链表,方法一使用的是链表的头插法 * @param head 传入的单链表 * @return 单链表的头 */ public static ListNode reverseList01(ListNode head){ ListNode temp = head; ListNode newList = nu.

我的梦境传说 719

巡检类机器人电池容量计算方法论(原理+算法+真实案例)

摘要:本文系统阐述了巡检机器人电池容量的计算方法,重点解析了;能量平衡;核心原理和三种主流算法。通过光伏电站履带式巡检机器人的真实案例,详细演示了从工况拆解、功耗采集到容量计算的完整流程。文章指出:室内轻载场景可采用静态平均功耗法,户外常规工况推荐动态负载积分法,而复杂环境需采用融合估算算法。特别强调需考虑温度修正(冬季容量衰减20%)、冗余系数(1.2-1.5)和放电深度(磷酸铁锂DoD取80%)等关键参数。

start_up_go的博客 243

单链表反转 递归 java_单链表反转(递归和非递归) (Java)

链表定义class ListNode {int val;ListNode next;ListNode(int x) {val = x;}}非递归实现很简单,只需要遍历一遍链表,在遍历过程中,把遍历的节点一次插入到头部。public ListNode reverseList(ListNode head) {ListNode prev = null;while(head!=null){ListNode...

weixin_34278722的博客 1246

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

单链表反转功能java实现

/** * 单链表反转 */ public class SingleListReverseDemo { public static void main(String[] args) { SingleListReverse singleListReverse = new SingleListReverse(); Node node1 = new Node(1); Node node2 = new Node(2); Node node.

Sol12363的博客 236

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

单链表反转的实现

java实现单链表反转 导语:如果你打开了此网页说明你至少对链表或者说链表的结构有一个大概的了 解,那么什么是链表反转并且如何实现链表反转的呢? 链表反转的意思就是输入一个链表,反转链表后,输出新链表的头,换句话说就是原链表倒序输出。 实现链表反转有两种方法,即递归法链表反转和遍历法链表反转。这两种方法在我们面试的时候也是面试官比较爱问的一些基础。 接下来我们就介绍并且分析一下这两种方法: 遍历...

Thinkao 的博客 483

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

单链表反转(JAVA)

单链表主类 public class SinglyLinkedList&amp;amp;lt;T&amp;amp;gt; { private SinglyLinkedNode&amp;amp;lt;T&amp;amp;gt; header; private int size; private static final int MAX = 5; public SinglyLinkedNode&amp;amp;lt;T&am

cedarjo的博客 903

用java实现单链表的各种操作

用java实现单链表的各种操作: 单链表的结构如下: //定义一个单链表,内部类 private class Node { private int data; private Node next; public Node() {} public Node(int data) { this.data =...

weixin_44470438的博客 1132

java 链表反转_java 单链表反转

最近与人瞎聊,聊到各大厂的面试题,其中有一个就是用java实现单链表反转。闲来无事,决定就这个问题进行一番尝试。1.准备链表准备一个由DataNode组成的单向链表,DataNode如下:public classDataNode {private intdata;privateDataNode next;public intgetData() {returndata;}public void se...

weixin_32558567的博客 307

java单链表的反转(带头结点)

java单链表的反转操作 1.定义节点类 //定义节点类 class Node{ public int data; public Node next; public Node(int data){ this.data = data; } @Override public String toString() { ret...

weixin_42433871的博客 679

单链表反转

单链表:链表中的数据是以结点来表示的,每个结点的构成:元素(数据元素的映象) + 指针(指示后继元素存储位置),元素就是存储数据的存储单元,指针就是连接每个结点的地址数据。 以“结点的序列”表示线性表称作线性链表(单链表),单链表是链式存取的结构。 反转单链表思路: 从头节点开始遍历,将每个节点的next指向它前面的那个节点。由于单链表只存储了它的下一个节点,因此需要用3个变量分别保存前一个节...

mlvper的博客 202
上一篇: Java 算法篇-深入理解递归(递归实现:青蛙爬楼梯)
下一篇: Java 算法篇-链表的经典算法:根据值删除节点、删除倒数第 n 个节点
小扳
小扳 优质创作者: Java技术领域 优质创作者: Java技术领域
博客等级 码龄4年 1万+粉丝 170原创
评论 91
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小扳

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值