链表-----返回倒数第K个节点回文结构的判断相交链表

目录

1.返回倒数第K个节点

2.回文结构的判断

3.相交链表的判断,返回交点


1.返回倒数第K个节点

(1)返回链表的第k个节点,我们这里的做法是定义两个指针,这两个指针之间相差的是k这个长度;这个过程的实现就是让这两个指针都指向头部节点,让我们的快指针移动k个单位长度,慢指针原地不动,这个过程我们是使用的k--进行循环的控制;

(2)第二个while循环是进行的指针的移动,这个时候我们的快慢指针都已经在指定的位置,接下来进行的是两个指针的同时移动,最后循环结束的时候慢指针的下一个节点恰好就是我们要找到的倒数第k个节点;

因为我们的第二个循环的循环条件是fast当我们的fast指向6的后面的时候(看最下面的图片),slow才指向4,但是这个时候已经不满足循环的进行条件,已经跳出循环了,这个时候我们就可以发现,slow->next正好就是我们要找的倒数第k个节点;

(3)下面的一连串图片或许可以帮祝您进行进一步的理解:下面的过程是用k=2作为例子的

2.回文结构的判断

(1)这个回文结构的判断就比较有水平了,这道题目要求我们要对链表的中间节点的查找方法以及链表的逆置这些基本的操作十分了解,才可能解决这道综合性的题目;

(2)这里我们首先要找到中间的节点,奇数个节点的中间节点是唯一的,偶是个的话有两个,我们返回的是右边的那个;

(3)我们分情况进行讨论(讨论的过程都是用的上面的这两个例子),如果是奇数个节点,那么就可以直接找到对应的中间位置的节点3,我们接下来进行的操作就是从3这个位置开始后面的节点都进行逆置

逆置完成之后我们就要进行比较,从中间节点的位置开始,1和1比,2和2比都相等,那么问题来了?3和谁进行比较呢?其实不要忘了,我们后面虽然逆置了,但是这个是链表,链表里面的,我们的第二个位置的2next指针指向的是原来的3,虽然逆置完之后,3的位置已经变了,但是我们的第二个位置的2next指针还是指向3的,我们的让2->next指向的数值和3进行比较,发现是相等的,这个时候就可以说明我们的这个奇数个节点的链表是会回文结构的;

(4)如果是下面的偶数个节点,我们就从第二个3位置开始让后面的都逆置,逆置完之后,让对应位置的节点进行比较,对应位置的节点相等,说明就是回文结构的。

(5)bool45行开始的就是我们的主函数,在这个函数的第一行,我们调用封装的函数找到中间的节点,第二行我们对从中间节点向后的节点进行逆置;

接下来就是使用循环进行比较,如果发现有位置对应的节点不一样说明就不是回文结构,返回false,如果循环的整个过程对应的位置都一样,就说明是回文结构,返回true.

3.相交链表的判断,返回交点

(1)两个链表的相交,肯定是中间的某个节点相交,最后的一个节点肯定是一样的,下面展示的就是我们的思路:

(2)首先,我们要明确的是两个链表的长度可能是不一样的,我们要让他们指向对应的位置,什么叫做对应的位置?

例如上面的图片,链表A长度是5,链表B长度是6,如果他们定义了两个指针各自指向链表的头结点然后开始移动,他们两个一定不会在节点的位置相遇,因为这两个链表的长度是不一样的;

我们要实现的就是上面显示的,让链表A里面指针指向a1,B链表里面的指针指向b2,为什么是b2呢,因为b2和较短的链表的头结点到交点位置的长度是一样的,这样再同时移动就可以让这两个链表在节点的位置相交;

(3)我们这里首先要解决的首要的问题就是,如何在较长的链表里面找到这个和较短链表头结点位置对应的节点;

我们这里采用的方法是分别计算两个链表的长度,第一个链表(示例里面)长度是6,第二个链表的长度是7,我们让7-6=1,得到的1就是长链表里面的对应的位置的下标,下标为1位置的节点就是长链表里面的和短链表的头结点位置对应的节点;

(4)细心一下就会发现,我们的初始化的时候len设置的是1,为什么是1呢?因为在循环条件里面,我们的设置的循环条件是curA->next,当这个链表来到最后的一个节点,next节点就是空的,已经进不去循环了,所以相当于我们的最后一次的len并没有加上,如果我们想要得到这个链表的长度的精确值,我们就初始化为1,其实初始化为0得到的是链表的长度减去一,这个对于我们的代码是没有影响的,因为我们要计算的是两者之间的差值,就算两个链表的长度都少计算一个,最后得到两个链表的长度的差值其实是不会改变的;

(5)这个工作完成之后,我们的curA,curB这个时候就指向的是链表的尾部,如果到尾部他们两个都不相同,说明这两个链表是没有公共的节点的;我们就可以直接返回NULL了;

(6)这个时候我们已经知道了移动几个位置长链表可以找到对应的位置,我们使用假设的方法得到长度的差值,以这个gap--作为循环的条件,让longlist右移,循环结束longlist就到了和shortlist指定位置;

(7)接下来我们就可以从短链表的头部开始移动,长链表的指定位置(这个指定位置就是我们的gap--循环结束之后指向的位置)开始移动,找到对应的相交的节点,最后返回随便的一个,因为这个时候退出循环说明两个链表已经相交,这个时候长链表和短链表指向的都是我们要找的交点。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/317286.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Android手势识别面试问题及回答

问题 1: 如何在Android中实现基本的手势识别? 答案: 在Android中,可以通过使用GestureDetector类来实现基本的手势识别。首先需要创建一个GestureDetector的实例,并实现GestureDetector.OnGestureListener接口来响应各种手势事件&#xff0c…

创建SpringBoot和RabbitMQ的整合项目

文章目录 创建SpringBoot和RabbitMQ的整合项目首先快速创建一个maven项目引入SpringBoot整合rabbitMQ的依赖在src/main目录下创建resources目录并引入配置文件写消息发送者MessageSender写消息接收者MessageReceiver写RabbitMQConfig配置类写SpringBoot启动主类CommandLineRunn…

小剧场短剧影视小程序源码_后端PHP

项目运行截图 源码贡献 https://githubs.xyz/boot?app42 部署说明 linux/win任选 PHP版本:7.3/7.2(测试时我用的7.2要安装sg扩展 ) 批量替换域名http://video.owoii.com更换为你的 批量替换域名http://120.79.77.163:1更换为你的 这两个…

代码随想录算法训练营第60天|84.柱状图中最大的矩形

84. 柱状图中最大的矩形 题目链接:柱状图中最大的矩形 题目描述:给定 n 个非负整数,用来表示柱状图中各个柱子的高度。每个柱子彼此相邻,且宽度为 1 。 求在该柱状图中,能够勾勒出来的矩形的最大面积。 解题思路&#…

24 JavaScript学习:this

this在对象方法中 在 JavaScript 中,this 的值取决于函数被调用的方式。在对象方法中,this 引用的是调用该方法的对象。 让我们看一个简单的例子: const person {firstName: John,lastName: Doe,fullName: function() {return this.firstN…

【webrtc】MessageHandler 3: 基于线程的消息处理:以sctp测试为例

消息处理可以用于模拟发包处理G:\CDN\rtcCli\m98\src\net\dcsctp\socket\dcsctp_socket_network_test.cc 这个实现中,onMessage还是仅对了一种消息进行处理,就是接收则模式下,打印带宽。当然,可能程序有多个消息,分别在不同的onmessage中执行?SctpActor:以一个恒定的速率…

C语言贪吃蛇项目

今天给大家带来一款简单的贪吃蛇游戏,一起随我来看看吧 游戏效果: 实现基本的功能: • 贪吃蛇地图绘制 • 蛇吃⻝物的功能:(上、下、左、右⽅向键控制蛇的动作) • 蛇撞墙死亡 • 蛇撞⾃⾝死亡 • 计算得分…

Flink 实时数仓(一)【实时数仓离线数仓对比】

前言 昨天技术面的时候,面试官说人家公司现在用的都是最新的技术,比如 Doris 等一些最新的工具,确实这些课是学校永远不会开设的,好在他说去了会带着我做一做。可是 ...... 学院这边确实不允许放人,唉,可惜…

Kubernetes 弃用Docker后 Kubelet切换到Containerd

containerd 是一个高级容器运行时,又名 容器管理器。简单来说,它是一个守护进程,在单个主机上管理完整的容器生命周期:创建、启动、停止容器、拉取和存储镜像、配置挂载、网络等。 containerd 旨在轻松嵌入到更大的系统中。Docke…

python项目入门新手攻略

最近工作需要接手了代码量比较大的python开发的项目,平时写python不多,记录一下如何熟悉项目。 分析调用流程-pycallgraph 因为代码量比较大,所以希望通过工具生成代码调用流程,因此用到了pycallgraph。 pycallgraph&#xff0…

windows Jenkins运行python+selenium打开浏览器一直无响应,运行中,还没有打开浏览器

一开始解决办法是把打开服务把Jenkins给禁用了 但是没有用,然后找到安装目录 C:\Program Files\Jenkins 在这个路径下,在地址栏输入cmd打开命令窗口运行Jenkins启动命令 java -jar jenkins.war --httpPort8080 打开浏览器进入链接 http://localhost:…

【Unity学习笔记】第十四 Prefab 概念解惑

目录 1 prefab、prefab变体、prefab覆盖和prefab 嵌套2 connect 与unpack3 prefab到底是什么,它和gameobject又有什么区别?4 为什么要用prefab?5 代码动态加载prefab6 为什么我unity PrefabUtility.InstantiatePrefab() 得到的是null7 Prefab…

Redis基本命令

目录 一、包含String、Set数据类型的基本命令 1、添加一个键值对 2、获取key所关联的字符串值 3、同时设置多个key-value 4、获取多个key对应的值 运行结果 5、将给定的value追加到原值的末尾 追加后效果 6、删除单个key 7、同时删除多个key 8、查询包含某个字符的k…

ubuntu入门

基础命令 cd 切换命令 ls 查看当前目录下所有的文件 cp a.c b.c 拷贝a.c 到 b.c touch a.c 创建a.c文件 mkdir file 创建文件夹file rm file 删除文件 rmdir 删除test文件夹 rmdir test/ mv 移动文件 mv a.c b.c 把a.c 替换成b.c ifconfig 查看电脑网络信息 rm xx 删…

Mybatis进阶(动态SQL)

文章目录 1.动态SQL1.基本介绍1.为什么需要动态SQL2.基本说明3.动态SQL常用标签 2.环境搭建1.新建子模块2.删除不必要的两个文件夹3.创建基本结构4.父模块的pom.xml5.jdbc.properties6.mybatis-config.xml7.MyBatisUtils.java8.MonsterMapper.java9.MonsterMapper.xml10.测试Mo…

工业互联网通讯协议—欧姆龙(Fins tcp)

一、场景 近期公司要对欧姆龙CP系列设备的数据采集,于是就研究了下欧姆龙的Fins Tcp协议。 二、Fins Tcp 组成字节说明固定头446494E53 FINS对应的ASCII码的十六进制长度4后面剩余指令的长度命令4 握手固定为:00000000 读写固定为:0000000…

Unity 实现新手引导遮罩

Unity 复写OnPopulateMesh 实现新手引导遮罩、包含点击事件触发区域判断 https://download.csdn.net/download/shenliang34/89247117

【第3节】“茴香豆“:搭建你的 RAG 智能助理

目录 1 基础知识1.1.RAG技术的概述1.2 RAG的基本结构有哪些呢?1.3 RAG 工作原理:1.4 向量数据库(Vector-DB ):1.5 RAG常见优化方法1.6RAG技术vs微调技术 2、茴香豆介绍2.1应用场景2.2 场景难点2.3 茴香豆的构建: 3 论文快读4 实践…

15(第十四章,大数据和数据科学)

目录 概述 基本概念 数据仓库/传统商务智能与数据科学的比较 数据科学的过程 大数据 大数据来源 数据湖 机器学习 监督学习 无监督学习 强化学习 扩展 1、数据仓库(Data Warehouse) 2、数据湖(Data Lake) 3、大数据平台1.0 4、数据中台 …

外贸企业邮箱是什么?Zoho Mail——你的专业外贸邮局

外贸企业邮箱是什么?做外贸行业必须要有企业邮箱吗?这是一些外贸企业的困惑。外贸企业邮箱和我们平时使用的个人邮箱有着几方面的不同。一是安全稳定;二是功能丰富性;三是存储空间更大。Zoho Mail企业邮箱在这些方面都能满足外贸企…