mysql 表结构反转,【数据结构】单向链表的反转/倒置的一种实现方法

article/2025/9/20 0:16:50

【背景】

单向链表由于其存储灵活,所有的元素位置是通过额外开辟的指针作为指向的,于是在复习过程中,不由得想象一下如何将链表进行反转。

参考网上的教程,大多是用改变指针的指向进行实现,当然也有利用递归栈的特殊性质进行实现,考虑到复习时间不足,本文对其中一种实现方法进行分析,并给出源码实现。

【源码运行环境】

操作系统:MAC OS X 10.13.4

编译环境:CLion (C++ 14) cmake

【分析】

现假定针对这样一个结构构成的链表进行分析:

1540729688253819.png

首先,在上图基础上做辅助指针准备工作。

为了保存链表上下文(中间状态)

本文设置了四块指针:

head —> 保存链表头结点

cur   —> 保存前驱节点(游标)

top   —> 保存待反转节点(游标)

first  —> 保存元素首节点

设置后的指针结构如下:

1540730631519580.png

本文采用一种元素前插倒转法进行链表倒置。

算法描述如下:

将元素上下文用first首指针保存;

将链表头节点用head指针保存;

现阶段链表划分为两个子集s1(反转后状态),s2(未反转状态);

其中cur是指向s1集合中的尾元素,top指向的是s2集合中的首元素;

将头结点(head-next)指向在s2集合中的首元素(top指向的元素);

利用前驱指针cur-next指向s2集合中的次元素(top->next);

将s2集合中的首元素指向(top->next)first元素首部(first);

将top指针后移(top = cur->next);

判断top指针是否为空;

case 1: top为空 结束反转

case2 : top不为空重复1-9步骤

算法数学描述:

起始:

s1 = {}

s2 ={S1,S2,S3,S4,…Sn}

第一次:

s1 = {S1}

s2 = {S2,S3,S3,S4,…,Sn}

第二次:

s1 = {S2,S1}

s3 = {S3,S4,S5}

第n次:

s1 = {Sn,…,S3,S2,S1}

s3 = {}

算法图解如下:

第一步步骤如下:

1540733339576374.jpeg

第一步完成时:各指针状态

1540732550779109.png

简化后(第二次开始状态):

1540732806300993.png

第二次步骤:

1540733240910387.png

简化后(第三次起始)指针上下文如下:

1540733513709755.png

当top指向NULL节点时,此时循环结束,反转完成。

【算法源码实现】

核心代码如下:

Status LinkListReverse(Link *L)

{

if(LinkListEmpty(*L))

{

return OVERFLOW;

}

Link head = *L;

Link cur = head->next;

Link top = cur->next;

Link first = NULL;

while(top != NULL)

{

first = head->next;

head->next = top;

cur->next = top->next;

top->next = first;

top = cur->next;

}

return TRUE;

}

【总结】

本文介绍了一种实现单向链表反转的方法并给出了实现,但是反转的算法还有很多值得改善的地方,也有不同的算法可以实现同样的功能。(递归法、后插反转法等)。算法的学习道路还很深,希望自己能够借此机会锻炼自己的计算机思维能力。(共勉)。

【参考文献】


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

相关文章

Mysql数据库面经

目录 1、SQL1.1 介绍一下数据库分页1.2 介绍一下SQL中的聚合函数1.3 表跟表是怎么关联的?1.4 说一说你对外连接的了解1.5 说一说数据库的左连接和右连接1.6 SQL中怎么将行转成列?1.7 谈谈你对SQL注入的理解如何解决SQL注入1.8 将一张表的部分数据更新到另…

MySQL进阶

一、索引 1.1 索引概述 MySQL官方对索引的定义为:索引(index)是帮助MySQL高效获取数据的数据结构(有序)。在数据之外,数据库系统还维护着满足特定查找算法的数据结构,这些数据结构以某种方式引用(指向)数据,这样就可以在这些数据…

MySQL经典100问

目录 常规篇 1、说一下数据库的三大范式? 2、只查询一条数据,但是也执行非常慢,原因一般有哪些? 3、count(*)、count(0)、count(id)实现方式的区别? 4、误删数据怎么办? 5、drop、truncate 和 delet…

Mysql常见面试题

文章目录 1. SQL1.1 介绍一下数据库分页1.2 SQL中怎么将行转成列?1.3 谈谈你对SQL注入的理解1.4 WHERE和HAVING有什么区别? 2. 索引2.1 说一说你对MySQL索引的理解2.2 如何创建及保存MySQL的索引?2.3 如何判断数据库的索引有没有生效&#xf…

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

单链表是一种线性数据结构,由当前节点数据和指向下个节点的指针组成,因为是单向的,所以称为单链表 单链表的反转: 例如:1—>2—>3—>4 反转成:4—>3—>2—>1 首先定义一个链表的节点&…

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

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

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

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

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中 注意:这里我将链表中的实际的串联的数据叫做数据类比如:lock_t、mem_block_t 链表作为一种的非常重要的数据结构,在任何地方都会用到,这里简单解释一下innodb双向链表的实现,让我们来看看innodb链表设…

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

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

【链表】反转链表

反转链表 要求我们不分配额外的空间,使链表进行反转。 题目分析 链表的节点结构如下: 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,高于此版本本人测试无法破解。 进入官网 http://www.jetbrains.com/idea/ 选择download——Ultimate版本 上图2019.1.1版本无法适用本破解方案。选择 Previous versions(历史版本) 选择此版本下载 或直接点击此链接下载&…

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

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

IntelliJ IDEA 2018.1.5 安装和破解教程

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

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

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

IntelliJ IDEA的安装和破解

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

IntelliJ IDEA 2018破解方法

1、去官网下载并安装 idea 地址:https://www.jetbrains.com/idea/download 2、下载破解(crack) jar 包 网站地址: 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工具。它整合了开发过程中实用的众多功能,几乎可以不用鼠标可以方便的完成你要做的任何事情,最大程度的加快开发的速度。简单而又功能强大。然而我尝试了之前的一些License…

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

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

三步破解IntelliJ IDEA2017

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