【数据结构】链表专题2

前言

本篇博客继续探讨有关链表的专题,这片博客的题,提前打个预防针,有点意思哦,哈哈哈,话不多说,进入正文

💓 个人主页:小张同学zkf

⏩ 文章专栏:数据结构

 若有问题 评论区见📝

🎉欢迎大家点赞👍收藏⭐文章 ​

目录

1.返回倒数第几个节点

2.链表的回文结构

3.相交链表​


1.返回倒数第几个节点

这道题跟我们上一篇博客有道题返回中间节点有点像,首先这道题时间复杂度O(1),所以我们遍历原链表只能遍历一次

那我们就继续用返回中点节点的方法,快慢指针做这道题也适用

快慢指针,如若我让快指针先走k步,走完了再让慢指针走,此刻快慢指针就差k,双指针同时遍历,直到快指针走完,此刻慢指针返回的就是倒数第k的节点,所以一定要确保俩指针要差k

代码如下: 


2.链表的回文结构

这道题,我们乍一看有点难,要求时间复杂度为O(n),空间复杂度为O(1)

我们要想证明它是个回文结构,首先我们先了解回文结构的特征,就是以中间节点为中心,这个链表的值是对陈的,那我们要证明对称,我么是不是可以先找到终点节点,再反向一下以中间节点为首的之后的节点,然后中间指针与首指针遍历判断值是否相等,如图所示,这里有人有疑问,偶数个接点还可以看,但奇数个接点那,如图所示那个三,其实,再反转时,我们没有消除第一个二指向三的指针,所以两个2此刻都指向三, 只要在遍历时发生不相等的,那就不是回文,若直到遍历完,还都是相等的,那就是回文。

所以我们就创建两个函数,其实就把我们链表1里面的反转链表和返回中间节点的代码复制过来就行,哈哈,cv工程师

 那这两个函数我就不详细说了,在我的博客链表专题1里有,一个是反转链表用三指针法,一个是返回中间节点用快慢指针法

链表专题一博客链接:http://t.csdnimg.cn/zM8BB

好了整体总结一下

1.创建返回中间节点函数

2.创建反向链表函数,返回头结点

3.遍历原链表与函数返回的链表判断

代码如下: 


3.相交链表 

首先我们要想一点,什么是链表相交

首先看一个图 

这种可不是链表的相交

这种是

也就是说链表相交,是两个线合成一个线 

为什么这种不可以,因为链表一个节点怎么可能会同时指向两个节点,一个节点只能指向一个节点

所以这道题做法就清楚了

我们首先判断是否相交,若相交,其次返回相交的第一个节点

怎么判断相交那

有一个非常巧妙的方法

看俩链表是否尾结点一样,若一样,代表相交,否则不想交,我们仔细想想若俩链表合二为1,那么俩链表是不是就是同一个尾结点,所以这点很巧妙

注意这里尾结点判断是地址判断,不是值,值的话有可能出现俩链表尾结点值一样。

所以遍历俩链表找到最后一个节点就行了。 

 ok,我们判断完了,若相交,来继续看看怎么返回头结点

我们用俩指针指向两链表的头部,因为相交之前,俩链表的长度不确定,我们先判断,谁长,让谁先走他们相差的部分,走完另一个指针再遍历,此刻两个指针同时向后遍历,若遍历的值相同了,就找到第一个相交的节点了

OK,我们可以用假设法来判断

什么叫假设法?

 我们可以先创建一个变量来记录长的节点,另一个变量记录短的节点,然后假设长的就是第一个链表,短的就是第二个链表,再用if判断看两个变量需不需要互换,这样就不用管到底哪个链表长,哪个链表短

假设法代码如下:

判断完之后就可以,让谁先遍历差值,再一起遍历,一个一个判断是否相等就行了

这道题代码如下


结束语 

链表专题2就结束了,还有几道典型的链表专题就放在下片博客说了

OK,感谢观看!!!

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

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

相关文章

ubuntu下安装配置python3.11

方案1 添加仓库: $ sudo add-apt-repository ppa:deadsnakes/ppa $ sudo apt update $ sudo apt install python3.11然后查看有多少个python版本已经安装了: ls -l /usr/bin/python*python2.7,python 3.8 ,python 3.11. 然后,设置系统默认…

【IC设计】CRC(循环冗余校验)

目录 理论解读CRC应用CRC算法参数解读常见CRC参数模型 设计实战校招编程题分类串行输入、并行计算、串行输出**串行计算、串行输出(线性移位寄存器)LSFR线性移位寄存器(并转串)(并行计算)模二除 总结——串行、并行计算的本质参考…

【数据结构】--- 深入剖析二叉树(上篇)--- 初识树和二叉树

Welcome to 9ilks Code World (๑•́ ₃ •̀๑) 个人主页: 9ilk (๑•́ ₃ •̀๑) 文章专栏: 数据结构之旅 🏠 初识树 📒 树的概念 树是一种非线性的数据结构,它是由n(n>0)个有限结点…

旅游系列之:庐山美景

旅游系列之:庐山美景 一、路线二、住宿二、庐山美景 一、路线 庐山北门乘坐大巴上山,住在上山的酒店东线大巴游览三叠泉,不需要乘坐缆车,步行上下三叠泉即可,线路很短 二、住宿 长江宾馆庐山分部 二、庐山美景

SpringBoot 快速开始 Dubbo RPC

文章目录 SpringBoot 快速开始 Dubbo RPC下载 Nacos项目启动项目的创建创建主项目接口定义服务的创建Dubbo 服务提供者的创建服务的消费者创建 添加依赖给 Provider、Consumer 添加依赖 开始写代码定义接口在 Provider 中实现在 Consumer 里面使用创建启动类 注册中心配置启动 …

基于Spring Boot的校园博客系统设计与实现

基于Spring Boot的校园博客系统设计与实现 开发语言:Java框架:springbootJDK版本:JDK1.8数据库工具:Navicat11开发软件:eclipse/myeclipse/idea 系统部分展示 系统功能界面图,在系统首页可以查看首页、文…

状态模式

文章目录 1.UML类图2.状态基类3.状态实现类3.状态机管理类使用示例 1.UML类图 2.状态基类 public abstract class State {public string? Name { get; set; }public StateMachine? StateMachine {get; set;}public abstract void Exit();public abstract void Enter(); }3.…

(三)Appdesigner-界面转换及数据导入和保存

提示:文章为系列文章,可以在对应学习专栏里面进行学习。对应资源已上传 目录 前言 一、Appdesigner是什么? 二、界面切换 三、数据导入及保存 (一)数据导入 (二)数据保存 总结 前言 Appd…

2024年第六届先进材料、机械和制造国际会议(AMMM 2024)即将召开!

2024年第六届先进材料、机械和制造国际会议(AMMM 2024)将于2024年9月6-8日在日本东京举行。AMMM 2024将以国际材料,机械和制造为主题,吸引到来自多个领域的研究人员和学者相聚在一起分享知识,讨论想法,并了…

【力扣】203、环形链表 II

142. 环形链表 II 要解决这道题,首先需要对问题进行拆解: 确定链表是否存在环确定环的入口点 如何判断是否存在环呢?这个比较容易想到,使用快慢指针即可判断链表是否存在环。我们定义两个指针: ListNode slow head…

【RabbitMQ】可靠性策略(幂等,消息持久化)

MQ可靠性策略 发送者的可靠性问题生产者的重连生产者确认 MQ的可靠性数据持久化Lazy Queue 消费者的可靠性问题消费者确认机制消息失败处理 业务幂等性简答问题 发送者的可靠性问题 生产者的重连 可能存在由于网络波动,出现的客户端连接MQ失败,我们可以…

10G MAC层设计系列-(4)MAC TX模块

一、前言 MAC TX模块就是要将IP层传输过来的数据封装前导码、MAC地址、帧类型以及进行CRC校验,并与CRC值一块组成以太网帧。 二、模块设计 首先对输入的数据进行缓存,原因是在之后要进行封装MAC帧头,所以需要控制数据流的流动 FIFO_DATA_6…

neo4j 的插入速度为什么越来越慢,可能是使用了过多图谱查询操作

文章目录 背景描述分析解决代码参考neo4j 工具类Neo4jDriver知识图谱构建效果GuihuaNeo4jClass 背景描述 使用 tqdm 显示,处理的速度; 笔者使用 py2neo库,调用 neo4j 的API 完成节点插入; 有80万条数据需要插入到neo4j图数据中&am…

手机恢复出厂设置ip地址会变吗

当我们对手机进行恢复出厂设置时,很多人会担心手机的IP地址是否会发生变化。IP地址对于手机的网络连接至关重要,它决定了手机在网络中的身份和位置。那么,手机恢复出厂设置后,IP地址到底会不会发生变化呢?虎观代理小二…

华为鸿蒙系统(Huawei HarmonyOS)

华为鸿蒙系统(华为技术有限公司开发的分布式操作系统) 华为鸿蒙系统(HUAWEI HarmonyOS),是华为公司在2019年8月9日于东莞举行的华为开发者大会(HDC.2019)上正式发布的分布式操作系统。 华为鸿蒙…

进程控制【Linux】

文章目录 进程终止进程等待 创建一批子进程 #include <stdio.h> #include <unistd.h> #include <stdlib.h> #define N 5void runChild() {int cnt 10;while (cnt ! 0){printf("i am a child : %d , ppid:%d\n", getpid(), getppid());sleep(1);c…

MySQL:飞腾2000+Centos7.6 aarch64 部署MySQL8.0.36

目录 1.硬件环境 2.MySQL选择 Bundle版本【全部文件】​编辑 3.下载并安装 4.安装完成后检查mysql 5.初始化MySQL 6.那就问了&#xff0c;都初始化了啥&#xff1f; 7.尝试启动MySQL 8.给mysql文件授权 9.再次尝试启动正常 10.mysql初始化目录出现了mysql.sock 11.找…

buuctf-misc-30.被劫持的神秘礼物1

30.被劫持的神秘礼物1 题目&#xff1a;http数据流追踪&#xff0c;MD5哈希一下账户名和密码 MD5在线加密/解密/破解—MD5在线 (sojson.com)

C语言 | Leetcode C语言题解之第61题旋转链表

题目&#xff1a; 题解&#xff1a; struct ListNode* rotateRight(struct ListNode* head, int k) {if (k 0 || head NULL || head->next NULL) {return head;}int n 1;struct ListNode* iter head;while (iter->next ! NULL) {iter iter->next;n;}int add n…

NASA数据集——NOAA 气溶胶和海洋科学考察数据(AEROSE)

Saharan Dust AERosols and Ocean Science Expeditions 简介 NOAA 气溶胶和海洋科学考察&#xff08;AEROSE&#xff09;是一种基于测量的综合方法&#xff0c;用于了解热带海洋上空气溶胶长程飘移的影响&#xff08;Morris 等人&#xff0c;2006 年&#xff1b;Nalli 等人&a…