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

news2024/11/18 19:55:39

目录

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.coloradmin.cn/o/1637135.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

网络安全知识点

网络安全 1. 网络安全的定义,网络安全的属性。 定义:针对各种网络安全威胁研究其安全策略和机制,通过防护、检测和响应,确保网络系统及数据的安全性。 属性:机密性 认证(可鉴别性&#xff09…

手把手带你一起搭建Seata,结合SpringCloud alibaba实战(二)

手把手带你一起搭建Seata,结合SpringCloud alibaba实战(二) 前言具体实现大致流程配置微服务订单服务库存服务 测试订单服务异常库存服务异常 总结 接下来的一段时间论文解说要暂时放一放,咱们一起来了解下微服务方面的知识&#…

Web-SpringBootWeb

创建项目 后面因为报错,所以我把jdk修改成22,仅供参考。 定义类,创建方法 package com.start.springbootstart.Controller; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotati…

使用nacos实现注册中心和配置中心

实现注册中心 在pom文件中导入 <dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId> </dependency> 在bootstrap.yml中写下如下配置 spring:application:name: c…

安卓中对象序列化面试问题及回答

1. 什么是对象的序列化&#xff1f; 答&#xff1a; 序列化是将对象转换为字节流的过程&#xff0c;以便将其存储在文件、数据库或通过网络传输。反序列化则是将字节流重新转换为对象的过程。 2. 为什么在 Android 开发中需要对象的序列化&#xff1f; 答&#xff1a; 在 An…

一些优雅的监控运维技巧

准备工作 安装 sysstat sudo apt install sysstat查看某个进程的cpu情况 pidstst -u -p 256432查看某个进程的RAM情况 pidstst -r -p 256432查看某个进程的IO情况 pidstst -d -p 256432查看某个进程下的线程执行情况 pidstst -t -p 256432查看指定PID的进程对应的可执行文件…

2024五一杯数学建模C题思路分享 - 煤矿深部开采冲击地压危险预测

文章目录 1 赛题选题分析 2 解题思路2.1 问题重述2.2 第一问完整思路2.2 二、三问思路更新 3 最新思路更新 1 赛题 C题 煤矿深部开采冲击地压危险预测 煤炭是中国的主要能源和重要的工业原料。然而&#xff0c;随着开采深度的增加&#xff0c;地应力增大&#xff0c;井下煤岩动…

前端开发攻略---用原生JS在网页中也能实现文本转语音

1、原理 语音合成 (也被称作是文本转为语音&#xff0c;英语简写是 tts) 包括接收 app 中需要语音合成的文本&#xff0c;再在设备麦克风播放出来这两个过程。 Web API中对此有一个主要控制接口 SpeechSynthesis&#xff0c;外加一些处理如何表示要被合成的文本 (也被称为 utte…

6.C++模板(超全)

// 【思考】代码截屏&#xff0c;用荧光笔标写注释 挺清晰的&#xff0c;虽然不太整齐了&#xff08;在文末有尝试这种方法~&#xff09;&#xff0c;就是感觉 // 注释没有那么突出和强调&#xff0c;友友们要不讨论一下&#xff0c;不知道你们看起来是什么感觉&#xff0c;我…

Python 与 TensorFlow2 生成式 AI(一)

原文&#xff1a;zh.annas-archive.org/md5/d06d282ea0d9c23c57f0ce31225acf76 译者&#xff1a;飞龙 协议&#xff1a;CC BY-NC-SA 4.0 序言 “想象力比知识更重要。” – 阿尔伯特爱因斯坦&#xff0c;《爱因斯坦关于宇宙宗教和其他见解与格言》&#xff08;2009&#xff09;…

安全再升级,亚信安慧AntDB数据库与亚信安全二次牵手完成兼容性互认证

日前&#xff0c;湖南亚信安慧科技有限公司&#xff08;简称&#xff1a;亚信安慧&#xff09;的产品与亚信科技&#xff08;成都&#xff09;有限公司&#xff08;简称&#xff1a;亚信安全&#xff09;再次携手&#xff0c;完成亚信安慧AntDB数据库与亚信安全IPoE接入认证系统…

【进程通信】用命名管道模拟server和client之间的通信

关于命名管道 当了解了匿名管道的通信机制只能用于具有血缘关系的进程之间时&#xff0c;似乎是出于本能的提出疑问–如果两个进程没有任何关系呢&#xff1f; 假如两个进程之间没有血缘关系&#xff0c;彼此进程就没法轻易拥有对方的文件资源&#xff0c;即不能看到同一份共…

C++Day 7 作业

1、lambda #include <iostream>using namespace std;int main() {int a 100;int b 90;int temp;auto fun [&]()mutable->int {temp a;ab;btemp;};fun();cout<<a<<endl;return 0; } 2、vector #include <iostream> #include <vector>…

Linux 第十七章

&#x1f436;博主主页&#xff1a;ᰔᩚ. 一怀明月ꦿ ❤️‍&#x1f525;专栏系列&#xff1a;线性代数&#xff0c;C初学者入门训练&#xff0c;题解C&#xff0c;C的使用文章&#xff0c;「初学」C&#xff0c;linux &#x1f525;座右铭&#xff1a;“不要等到什么都没有了…

Python 与 TensorFlow2 生成式 AI(三)

原文&#xff1a;zh.annas-archive.org/md5/d06d282ea0d9c23c57f0ce31225acf76 译者&#xff1a;飞龙 协议&#xff1a;CC BY-NC-SA 4.0 第七章&#xff1a;使用 GAN 进行风格转移 神经网络在涉及分析和语言技能的各种任务中正在取得进步。创造力是人类一直占有优势的领域&…

探索潜力:中心化交易所平台币的对比分析

核心观点 平台币在过去一年里表现差异显著&#xff1a; 在过去的一年里&#xff0c;只有少数几个平台币如BMX、BGB和MX的涨幅超过了100%。相比之下&#xff0c;由于市值较高&#xff0c;BNB和OKB的涨幅相对较低。 回购和销毁机制在平台币价值中起决定性作用&#xff1a; 像M…

力扣刷题 63.不同路径 II

题干 一个机器人位于一个 m x n 网格的左上角 &#xff08;起始点在下图中标记为 “Start” &#xff09;。 机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角&#xff08;在下图中标记为 “Finish”&#xff09;。 现在考虑网格中有障碍物。那么从左上角到…

【JS篇之】异常

前言&#xff1a;在代码编写过程中&#xff0c;最常遇到的就是程序异常。其实异常并非坏事&#xff0c;它可以让开发人员及时发现、定位到错误&#xff0c;提醒我们做正确的事情&#xff0c;甚至在某些时候&#xff0c;我们还会手动抛出异常。 1.异常的分类 在JS中&#xff0…

PotatoPie 4.0 实验教程(32) —— FPGA实现摄像头图像浮雕效果

什么是浮雕效果&#xff1f; 浮雕效果是一种图像处理技术&#xff0c;用于将图像转换为看起来像浮雕一样的效果&#xff0c;给人一种凸起或凹陷的立体感觉&#xff0c;下面第二张图就是图像处理实现浮雕效果。 不过这个图是用Adobe公司的PS人工P图实现的&#xff0c;效果比较…

http的basic 认证方式

写在前面 本文看下http的basic auth认证方式。 1&#xff1a;什么是basic auth认证 basic auth是一种http协议规范中的一种认证方式&#xff0c;即一种证明你就是你的方式。更进一步的它是一种规范&#xff0c;这种规范是这样子&#xff0c;如果是服务端使用了basic auth认证…