mysql 表结构反转_数据结构-单链表反转的三种方式

article/2025/9/20 0:25:23

单链表是一种线性数据结构,由当前节点数据和指向下个节点的指针组成,因为是单向的,所以称为单链表

单链表的反转:

例如:1—>2—>3—>4 反转成:4—>3—>2—>1

首先定义一个链表的节点:

public class Node {

private int data;

private Node next;

public Node(int data) {

this.data = data;

next = null;

}

//添加节点

public Node addNode(Node node) {

next = node;

return node;

}

public void setNext(Node next) {

this.next = next;

}

public Node getNext() {

return next;

}

@Override

public String toString() {

return "Node{" +

"data=" + data +

", next=" + next +

'}';

}

}

方式一:遍历节点,反转每个节点,也叫头插法,因为节点依次插入了新链表的头部

因为单链表只有指向下一个节点的指针,没有指向上个节点的指针。所以我们可以定义个指针指向上个节点,这样我们遍历链表,把每个指向下个节点的指针,指向上个节点,这样每个节点都指向了上个节点,实现了反转。如下图所示:

preNode 指向上个节点,curNode指向当前节点,让curNode的next指向preNode,然后移动preNode 和 curNode ,这样最终以preNode为头结点,实现了单链表的反转

cbe1d9550303086b1a7d9a01ea92fd1b.png

代码:

public Node reverse() {

if (this == null || this.next == null) {

return this;

}

//上个节点

Node preNode = null;

//当前节点

Node curNode = this;

while (curNode != null) {

//当前节点的下个节点

Node next = curNode.getNext();

//修改当前节点的下个节点,让其指向上个节点

curNode.setNext(preNode);

//上个节点移动到当前节点

preNode = curNode;

//当前节点移动到下个节点

curNode = next;

}

return preNode;

}

测试:

public class Test {

public static void main(String[] args) {

Node head = new Node(1);

head.addNode(new Node(2)).addNode(new Node(3));

System.out.println("反转前:" + head);

Node reverse = head.reverse();

System.out.println("反转后:" + reverse);

}

}

结果:

反转前:Node{data=1, next=Node{data=2, next=Node{data=3, next=null}}}

反转后:Node{data=3, next=Node{data=2, next=Node{data=1, next=null}}}

方式二:借助栈的特性,先进后出,实现单链表的反转

public static Node reverse2(Node head) {

if (head == null || head.next == null) {

return head;

}

Stack stack = new Stack<>();

while (head != null) {

stack.push(head);

head = head.getNext();

}

head = stack.pop();

//当前节点的位置

Node cur = head;

while (!stack.isEmpty()) {

Node node = stack.pop();

node.next = null;

cur.next = node;

cur = node;

}

return head;

}

方式三:递归

递归的方式理解起来,感觉有点困难

public static Node reverse3(Node head) {

if (head == null || head.next == null) {

return head;

}

Node prev = reverse3(head.next);

head.next.next = head;

head.next = null;

return prev;

}

测试

public class Test {

public static void main(String[] args) {

Node head = new Node(1);

head.addNode(new Node(2)).addNode(new Node(3));

System.out.println("反转前:" + head);

Node reverse = Node.reverse3(head);

System.out.println("反转后:" + reverse);

}

}

结果:

反转前:Node{data=1, next=Node{data=2, next=Node{data=3, next=null}}}

反转后:Node{data=3, next=Node{data=2, next=Node{data=1, next=null}}}


http://chatgpt.dhexx.cn/article/IwT9npp8.shtml

相关文章

mysql 双向链表_23张图!万字详解「链表」,从小白到大佬!

链表和数组是数据类型中两个重要又常用的基础数据类型。 数组是连续存储在内存中的数据结构&#xff0c;因此它的优势是可以通过下标迅速的找到元素的位置&#xff0c;而它的缺点则是在插入和删除元素时会导致大量元素的被迫移动&#xff0c;为了解决和平衡此问题于是就有了链表…

面试必备 | 不可不会的反转链表

反转链表这题真的是面试非常喜欢考的了&#xff0c;这题看起来简单&#xff0c;但是能用两种方法一遍 bug free 也是不容易的&#xff0c;面试的时候可以筛下来一大批人&#xff0c;无论是对 junior 还是 senior 面试都很爱考。 今天齐姐就带你梳理清楚思路&#xff0c;思路清楚…

C/C++基础题124.反转链表

Hello: Person person = new Person(); person.Name = “xueyubin”; person.WeChat = “18309212110”; person.HeaderPhoto=“戴眼镜、黑眼圈、格子衫、牛仔裤、双肩包”; person.Sex = “男”; String major[] = { ‘C’,“C++”, “Linux”,“MySQL” }; person.IWantSay(“…

MySQL跨库链表_MySQL InnoDB 中通用双向链表的实现

源码在Ut0lst.h中 注意&#xff1a;这里我将链表中的实际的串联的数据叫做数据类比如&#xff1a;lock_t、mem_block_t 链表作为一种的非常重要的数据结构&#xff0c;在任何地方都会用到&#xff0c;这里简单解释一下innodb双向链表的实现&#xff0c;让我们来看看innodb链表设…

链表常见面试题:反转链表

问题描述 给你单链表的头节点 head &#xff0c;请你反转链表&#xff0c;并返回反转后的链表。 示例1: 输入: head [1,2,3,4,5] 输出: [5,4,3,2,1] 示例2: 输入: head [1,2] 输出: [2,1] 一、问题分析 这道题常见的解法有两种&#xff1a;双指针迭代 和 递归。 方法一…

【链表】反转链表

反转链表 要求我们不分配额外的空间&#xff0c;使链表进行反转。 题目分析 链表的节点结构如下&#xff1a; class ListNode {int val;ListNode next;ListNode() {}ListNode(int val) { this.val val; }ListNode(int val, ListNode next) { this.val val; this.next ne…

IntelliJ IDEA 2019.1破解

此破解针对只针对IntelliJ IDEA 2019.1&#xff0c;高于此版本本人测试无法破解。 进入官网 http://www.jetbrains.com/idea/ 选择download——Ultimate版本 上图2019.1.1版本无法适用本破解方案。选择 Previous versions(历史版本) 选择此版本下载 或直接点击此链接下载&…

IntelliJ IDEA 2018.3.3 破解过程[详细步骤](Mac OS)

个人博客&#xff1a;小景哥哥 声明 若资金允许&#xff0c;请点击https://www.jetbrains.com/idea/buy/购买正版&#xff0c;谢谢&#xff01; idea安装及破解步骤&#xff1a; 1.首先进入https://www.jetbrains.com/官网进行下载。 本人下载版本版本信息&#xff1a; Ver…

IntelliJ IDEA 2018.1.5 安装和破解教程

1.首先下载IntelliJ IDEA&#xff0c;下载链接&#xff1a;http://www.jetbrains.com/idea/download/#sectionwindows&#xff1b;记得一定要选择UItimate版&#xff01; 2.下载完成后进行安装。傻瓜式安装&#xff08;都懂得&#xff09;。 3.安装完成后进行破解。首先下载破…

Intellij IDEA使用破解补丁激活(最新)

首先下载IDEA&#xff1a;https://www.jetbrains.com/idea/ 下载破解补丁&#xff1a;http://idea.lanyus.com/ 把下载的jar包导入进IDEA安装路径 在idea.exe.vmoptions和idea64.exe.vmoptions两个文件最后一行添加&#xff1a; -javaagent:C:\software\ideaIU-2018.2.4.win\…

IntelliJ IDEA的安装和破解

一、安装IntelliJ IDEA 1、首先在官网下载 IDEA 下载地址&#xff1a;https://www.jetbrains.com/idea/ 2、JetBrains旗下的所有ide对于学生来说都是可以免费使用的&#xff0c;点击下面的链接&#xff0c;使用edu邮箱注册一个账号&#xff0c;审核通过后就可以使用正版的Je…

IntelliJ IDEA 2018破解方法

1、去官网下载并安装 idea 地址&#xff1a;https://www.jetbrains.com/idea/download 2、下载破解(crack) jar 包 网站地址&#xff1a; http://idea.lanyus.com 3、下载好了的 破解 jar包 放到 idea 的 bin 目录下 4、修改 bin 目录下的 idea.exe.vmoptions 和 idea64.ex…

IntelliJ IDEA 2016.2 注册破解激活教程

IntelliJ IDEA 2016.2 发布了。IntelliJ IDEA被认为是当前Java开发效率最快的IDE工具。它整合了开发过程中实用的众多功能&#xff0c;几乎可以不用鼠标可以方便的完成你要做的任何事情&#xff0c;最大程度的加快开发的速度。简单而又功能强大。然而我尝试了之前的一些License…

IntelliJ IDEA破解版2018.3.1(亲测可用)

好多文章说直接去idea官网下&#xff0c;并给出官网地址&#xff0c;然后就是修改配置文件&#xff0c;同时附上其说的那个版本的破解码。 以为这样就可以成功破解了&#xff0c;no&#xff0c;往往官网上下的版本都是比较新的版本&#xff0c;而给的破解码都是比较老的&#x…

三步破解IntelliJ IDEA2017

三步破解IntelliJ IDEA 2017 一、下载 JetbrainsCrack-2.6.2.jar 破解补丁 注意下载最新的&#xff0c;如果版本不一样破解也可能不成功下载地址&#xff1a;http://idea.lanyus.com/将下载好的jar包放在idea安装目录的bin目录下 二、修改idea.exe.vmoptions文件 如果是64位…

IDEA最新版破解教程(版本:2018.1.4)

第一步&#xff1a;下载破解补丁》http://idea.lanyus.com/ 下载之后得到》JetbrainsCrack-2.10-release-enc.jar 第二步&#xff1a;重命名去掉-release-enc&#xff0c;然后放在IDEA安装目录的bin文件夹里面 第三步&#xff1a;分别在idea.exe.vmoptions和idea64.exe.vmop…

IDEA2017版本的破解方法

下载IDEA 此处提供了IDEA2017版本 https://pan.baidu.com/s/1bupxBqW4tbw9MTcfnhKUHg 提取码&#xff1a;7ro5 下载安装完成后&#xff0c;切记别首先打开运行软件&#xff0c;先在IDEA软件的bin目录下进行破解 破解 首先&#xff0c;百度下载一个 JetbrainsCrack-2.6.2.jar 破…

Intellij idea旗舰版最新免费破解使用方法(针对在校学生)

Intellij idea旗舰版最新免费破解永久使用方法&#xff08;针对在校学生&#xff09; edu学生邮箱将可以免费申请使用 首先你要注册idea的官网账号&#xff0c;https://account.jetbrains.com/login 账号必须是你的学校邮箱&#xff0c;其他的按步骤来就可以了&#xff0c;不附…

Intellij Idea 2016破解方法

Intellij Idea 2016.1~2016.2注册破解方法 此方法是在其他网站上看到的&#xff0c;转载过来&#xff0c;先分享出来。 主要步骤就是搭建本地intellij idea license server授权服务器&#xff0c;步骤非常的简单&#xff0c;我也会把要使用的相关工具发出来。 1.开始 我使用…

IDEA补丁破解使用方法

第一步&#xff0c;下载补丁&#xff08;根据自己的IDEA版本下载下面的破解补丁&#xff09;&#xff1a; 破解补丁无需使用注册码&#xff0c;idea15-2018.1.5激活补丁下载&#xff1a;http://www.itzoo.net/other/idea/822.html&#xff08;博文下方下载&#xff09; 最近在…