当前位置: 首页 > news >正文

【数据结构】习题之链表的回文结构和相交链表

 👑个人主页:啊Q闻       

🎇收录专栏:《数据结构》           

 🎉前路漫漫亦灿灿

前言 

今日的习题是关于链表的,分别是链表的回文结构和相交链表的判断。

链表的回文结构 

题目为:链表的回文结构_牛客题霸_牛客网

这道题目没有C语言的运行环境,我们可以用C++,C++兼容C

思路为: 

 我们实现判断是否为回文结构,要先找到中间节点,然后将中间节点开始的后部分逆置,所以我们要调用前面学习过的寻找中间节点和反转链表的函数【数据结构】链表习题之链表的中间节点和合并两个有序链表-CSDN博客

【数据结构】链表习题之反转链表和删除链表中等于给定值 val 的所有节点-CSDN博客

然后比较后半部分和前半部分,判断是否相同。

代码实现:

struct ListNode*reverse(struct ListNode*head)//反转链表
{if(head==NULL){return head;}struct ListNode*n1,*n2,*n3;n1=NULL;n2=head;n3=head->next;while(n2){n2->next=n1;n1=n2;n2=n3;if(n3){n3=n3->next;}}return n1;
}
struct ListNode*middleNode(struct ListNode*head)//寻找中间节点
{struct ListNode*slow,*fast;slow=fast=head;while(fast&&fast->next){slow=slow->next;fast=fast->next->next;}return slow;
}
class PalindromeList {
public:bool chkPalindrome(ListNode* A) {struct ListNode*mid=middleNode(A);//将节点后部分逆置struct ListNode*rmid=reverse(mid);while(A&&rmid)//比较两部分,当有一个为空时,循环结束{if(A->val!=rmid->val){return false;}A=A->next;rmid=rmid->next;}return true;}
};

相交链表 

题目为:. - 力扣(LeetCode)

思路为:

注意:我们比较的是节点的指针,而不是节点的值,因为节点不相交的时候,其节点的值也有可能相等。 

我们可以先找A和B链表的尾节点,如果尾节点相同,则代表这两个链表一定相交,然后我们再求长度差,让长的链表先走长度差,长的链表走完长度差后,A和B两个链表再一起走。


时间复杂度分析:我们利用这种方法,其时间的复杂度为:遍历A链表为N,遍历B链表为N,然后减去长度差后再一起遍历为N,N+N+N=3N,即O(N)。


在这个代码的实现过程中,我们会用到假设法,来简化长短链表的判断,是一个很实用的方法。

代码实现:

struct ListNode *getIntersectionNode(struct ListNode *headA, struct ListNode *headB) {struct ListNode*curA=headA;struct ListNode*curB=headB;int lenA=0;int lenB=0;while(curA->next)//A和B链表遍历找尾节点{++lenA;curA=curA->next;}while(curB->next){++lenB;curB=curB->next;}if(curA!=curB){return NULL;}int gap=abs(lenA-lenB);//abs为绝对值//假设法:假设A为长链表,B为短链表,然后再利用一个判断,不成立就交换struct ListNode*longlist=headA;struct ListNode*shortlist=headB;if(lenA<lenB){longlist=headB;shortlist=headA;}while(gap--)//长链表先走{longlist=longlist->next;}while(longlist!=shortlist)//A和B链表一起走{longlist=longlist->next;shortlist=shortlist->next;}return longlist;//该处返回长短链表均可
}

详解:

假设法:我们用假设法,就可以不用分别去讨论A>B,还是A<B,简化了代码

😃感谢大家阅读,希望对你有帮助😄

如果对你有帮助的话,三连支持一下吧

相关文章:

【数据结构】习题之链表的回文结构和相交链表

&#x1f451;个人主页&#xff1a;啊Q闻 &#x1f387;收录专栏&#xff1a;《数据结构》 &#x1f389;前路漫漫亦灿灿 前言 今日的习题是关于链表的&#xff0c;分别是链表的回文结构和相交链表的判断。 链表的回文结构 题目为&#xff1a;链表的回文结…...

5个常见的前端手写功能:New、call apply bind、防抖和节流、instanceof、ajax

实现New 首先创建一个新的空对象设置原型&#xff0c;将对象的原型设置为函数的prototype对象让函数的this指向这个对象&#xff0c;执行构造函数的代码判断函数的返回值类型&#xff0c;如果是值类型&#xff0c;返回创建的对象。如果是引用类型&#xff0c;就返回这个引用类…...

WPF 跨线程-Dispatcher:详解与示例

在 WPF 应用程序中&#xff0c;UI 线程负责处理用户界面元素的所有操作&#xff0c;例如绘制、布局和事件处理。由于 WPF 控件是线程敏感的&#xff0c;只能在 UI 线程上访问它们。如果我们想在后台线程中执行 UI 操作&#xff0c;我们就需要使用 Dispatcher 来确保这些操作在正…...

[c++][netcdf]通过c\c++读取字段的scale_factor与add_offset

函数&#xff1a;c void readScaleAndOffset(const char* FileName,const char* VarName) {NcFile dataFile(FileName, NcFile::read);NcVar Varf dataFile.getVar(VarName);//查看维度cout << "XSizef" << Varf.getDim(0).getSize() << endl;co…...

技术速递|.NET 智能组件简介 – AI 驱动的 UI 控件

作者&#xff1a;Daniel Roth 排版&#xff1a;Alan Wang AI 的最新进展有望彻底改变我们与软件交互和使用软件的方式。然而&#xff0c;将 AI 功能集成到现有软件中可能面临一些挑战。因此&#xff0c;我们开发了新的 .NET 智能组件&#xff0c;这是一组真正有用的 AI 支持的 …...

保护C#代码的艺术:深入浅出代码混淆技术

摘要 在C#开发中&#xff0c;代码的保护是一个不可忽视的问题。本文深入探讨了几种常用的C#代码混淆工具&#xff0c;帮助开发者理解如何有效地保护代码不被反编译。同时&#xff0c;本文也对混淆技术的优缺点进行了分析&#xff0c;并提供了一些实际使用的建议。 引言 C#是…...

多线程CountDownLatch使用

1、简介 CountDownLatch是一个同步工具类&#xff0c;用来携调多个线程之间的同步&#xff0c;它是是使用一个计数器进行实现的&#xff0c;计数器初始值为线程数量。当每一个线程完成自己任务后&#xff0c;计数器的值就会减1。当计数器的值为0时&#xff0c;表示所有的线程都…...

高校心理教育辅导系统|基于Springboot的高校心理教育辅导系统设计与实现(源码+数据库+文档)

高校心理教育辅导系统目录 目录 基于Springboot的高校心理教育辅导系统设计与实现 一、前言 二、系统功能设计 三、系统实现 1、学生功能模块的实现 &#xff08;1&#xff09;学生登录界面 &#xff08;2&#xff09;留言反馈界面 &#xff08;3&#xff09;试卷列表界…...

Rockchip Android13 Vold(三):App层

目录 前言 一:处理Volumes 1、接收StorageVolume 2、创建MediaVolume 3、附加MediaVolume...

数据结构——单链表(C语言版)

文章目录 一、链表的概念及结构二、单链表的实现SList.h链表的打印申请新的结点链表的尾插链表的头插链表的尾删链表的头删链表的查找在指定位置之前插入数据在指定位置之后插入数据删除pos结点删除pos之后的结点销毁链表 三、完整源代码SList.hSList.ctest.c 一、链表的概念及…...

:app debug:armeabi-v7a failed to configure C/C++

报错信息 由于刚换电脑不久&#xff0c;新建native c工程时&#xff0c;出现报错如下&#xff1a; :app debug:armeabi-v7a failed to configure C/C null java.lang.NullPointerExceptionat com.android.build.gradle.tasks.CmakeQueryMetadataGenerator.getProcessBuilder(…...

计算机网络——应用层(4)DHCP和套接字编程

一、动态主机配置协议DHCP 1、关于协议配置&#xff1a; 在协议软件中&#xff0c;给协议参数赋值的动作就叫协议配置一个协议软件在使用前必须已被正确配置&#xff0c;具体的配置信息取决于协议栈连接到互联网的计算机的协议软件需要正确配置的参数包括①IP地址&#xff1b…...

TF-IDF演算法(Term Frequency - Inverse Document Frequency)最好懂筆記

前情提要 BoW (Bag of Words) 演算法 假设现在有M篇文章&#xff0c;一共使用了N个词汇&#xff08;term&#xff09;&#xff0c;我们就可以将文章转换成以下类型的矩阵&#xff0c;其中column1和row1的“10”表示“文章1”中出现了10次“词汇1”&#xff0c;“文章1”也可以…...

2024年4月最新版GPT

2024年4月最新版ChatGPT/GPT4, 附上最新的使用教程。 随着人工智能技术的不断发展&#xff0c;ChatGPT和GPT4已经成为了人们日常生活中不可或缺的助手。2024年4月,OpenAI公司推出了最新版本的GPT4,带来了更加强大的功能和更加友好的用户体验。本文将为大家带来最新版GPT4的实用…...

机器学习——模型评价

概述 在机器学习中&#xff0c;模型评价是评估和比较不同模型性能的关键步骤之一。它是通过对模型的预测结果与真实标签进行比较&#xff0c;从而量化模型的预测能力、泛化能力和稳定性。模型评价旨在选择最佳的模型&#xff0c;理解模型的行为&#xff0c;并为模型的改进提供…...

ARP代理

10.1.0.1/8 和10.2.0.1/8是在同一个网段 10.1.0.2/16 和10.2.0.2/16 不在同一个网段 10.1.0.1/8 和10.1.0.2/16 是可以ping通的 包发出来了&#xff0c;报文有发出来&#xff0c;目的地址是广播包 广播请求&#xff0c;发到路由器的接口G 0/0/0 target不是本接口&#xff0…...

手写前端控制并发任务

思路&#xff1a; 主要通过异步等待队列执行的原理。 当前执行的任务数达到最大值的时候&#xff0c;再继续执行的任务会放入等待队列里&#xff0c;直到当前任务执行结束后&#xff0c;减少一个当前任务数&#xff0c;并且判断队列中是否有任务&#xff0c;如果有则按顺序执…...

好用的Python开发工具合集

​ Python是一种功能强大且易于学习的编程语言&#xff0c;被广泛应用于数据科学、机器学习、Web开发等领域。随着Python在各个领域的应用越来越广泛&#xff0c;越来越多的Python开发工具也涌现出来。但是&#xff0c;对于新手来说&#xff0c;选择一款合适的Python开发工具可…...

近屿智能全新推出AI培训产品:AIGC大模型工程师与产品经理学习路径图

如今&#xff0c;人工智能和自然语言处理技术的发展&#xff0c;使得AI生成的内容&#xff08;AIGC&#xff0c;AI Generated Content&#xff09;领域开发出了巨大的潜力。就像业内巨头OpenAI公司&#xff0c;开发出了一系列自然语言处理模型ChatGPT&#xff0c;不仅带动了全世…...

Vue 3中的反向代理 和如何在服务器配置反向代理

如何在Vue 3项目中配置反向代理&#xff0c;让前端开发变得爽到爆&#xff01;还有个小插曲&#xff0c;Vite为我们提供了更简单的方式&#xff0c;就像找对象一样直接。 首先&#xff0c;我们来谈谈反向代理是什么。简单来说&#xff0c;反向代理就像是前端和后端之间的婚姻介…...

【机器学习】贝叶斯算法在机器学习中的应用与实例分析

贝叶斯算法在机器学习中的应用与实例分析 一、贝叶斯算法原理及重要性二、朴素贝叶斯分类器的实现三、贝叶斯网络在自然语言处理中的应用四、总结与展望 在人工智能的浪潮中&#xff0c;机器学习以其独特的魅力引领着科技领域的创新。其中&#xff0c;贝叶斯算法以其概率推理的…...

回归预测 | Matlab实现SSA-GRNN麻雀算法优化广义回归神经网络多变量回归预测(含优化前后预测可视化)

回归预测 | Matlab实现SSA-GRNN麻雀算法优化广义回归神经网络多变量回归预测(含优化前后预测可视化) 目录 回归预测 | Matlab实现SSA-GRNN麻雀算法优化广义回归神经网络多变量回归预测(含优化前后预测可视化)预测效果基本介绍程序设计参考资料预测效果...

SQL SERVER的安装

目录 1.百度SQL SERVER找到图下的所显示的&#xff0c;点击进去 2.找到图下红色框起来的&#xff0c;点击立即下载 3.下载好之后点开&#xff0c;选择下载介质 4.SQLSERVER下载成功之后选择打开文件夹 6.双击后缀名是.iso的镜像文件 7.双击setup.exe进行安装 8.安装成功…...

(十一)C++自制植物大战僵尸游戏客户端更新实现

植物大战僵尸游戏开发教程专栏地址http://t.csdnimg.cn/cFP3z 更新检查 游戏启动后会下载服务器中的版本号然后与本地版本号进行对比&#xff0c;如果本地版本号小于服务器版本号就会弹出更新提示。让用户选择是否更新客户端。 在弹出的更新对话框中有显示最新版本更新的内容…...

关于Qt主窗口的菜单部件

前言 在介绍主窗口的两大部件之前&#xff0c;我们要先知道关于主窗口的一些知识。 主窗口 一个主窗口可以没有菜单条、工具条、状态条&#xff0c;但必须设置中心部件。在 Q 生成的 C头文件 ui_mainwindow.h 代码中,我们可以看到以下代码: centralWidget new Qwidget(MainWi…...

rabbitmq每小时自动重启

引言 找了半天&#xff0c;最后通过系统日志发现是因为执行 systemctl restart rabbitmq-server 命令无法返回回调 systemctl 导致超时&#xff0c;自动关机。怀疑是 rabbitmq 与 systemctl 冲突&#xff0c;后 mq 升级版本已修复&#xff0c;可参考&#xff1a;https://github…...

【多线程】单例模式 | 饿汉模式 | 懒汉模式 | 指令重排序问题

文章目录 单例模式一、单例模式1.饿汉模式2.懒汉模式&#xff08;单线程&#xff09;3.懒汉模式&#xff08;多线程&#xff09;改进 4.指令重排序1.概念2.question:3.解决方法4总结&#xff1a; 单例模式 一、单例模式 单例&#xff0c;就是单个实例 在有些场景中&#xff0c…...

00_Qt概述以及如何创建一个QT新项目

Qt概述 1.Qt概述1.1 什么是Qt1.2 Qt的发展史1.3 支持的平台1.4 Qt版本1.5 Qt的下载与安装1.6 Qt的优点 2.QT新项目创建3.pro文件4.主函数5.代码命名规范和快捷键 1.Qt概述 1.1 什么是Qt Qt是一个跨平台的C图形用户界面应用程序框架。它为应用程序开发者提供建立艺术级图形界面…...

git报错

这里写自定义目录标题 git报错Permission denied (publickey). fatal: Could not read from remote repository. Please make sure you have the correct access rights and the repository exists. 有一个原因就是在github上设置对应密钥时&#xff0c;有一个key获取应该设置为…...

【R: mlr3:超参数调优】

本次分享官网教程地址 https://mlr3book.mlr-org.com/chapters/chapter4/hyperparameter_optimization.html 型调优 当你对你的模型表现不满意时&#xff0c;你可能希望调高你的模型表现&#xff0c;可通过超参数调整或者尝试一个更加适合你的模型&#xff0c;本篇将介绍这些操…...

简单网站建设软件有哪些/东莞关键词优化实力乐云seo

引用自&#xff1a;http://blog.csdn.net/jackyxu_2008/archive/2009/03/21/4009791.aspx 最近用powerDesinger遇到一些小问题&#xff0c;遇到好几次同样的问题了&#xff0c;写在这里&#xff0c;以备查用&#xff1a;-----------------------------------------------------…...

南京雨花台区做网站/佛山网站建设

LeetCode 111&#xff1a;二叉树的最小深度 ⭕️ 解题思路&#xff1a; 分情况讨论&#xff0c;还是利用通过递归函数返回的过程来完成最小深度的计算 ❌ 代码部分: /*** Definition for a binary tree node.* public class TreeNode {* int val;* TreeNode left;* …...

开源网站模板cms/seo网络推广教程

项目实训的时候用到了二叉树遍历算法 话不多说&#xff0c;直接上代码吧。 如有错误还请指正哈~ /* 树是这样的&#xff1a;rootnode1 node2node3 node4 node5 */// 树的节点 const node3 {name: "node3", left: null, right: null}; const node4 {…...

h5手机制作网站开发/宁波优化seo是什么

通过两个进程分别读写串口&#xff0c;并把发送与接收到的内容记录在blog中&#xff0c;收到q时程序结束并退出import threading,timeimport serialimport stringclass SerThread:def __init__(self, Port0):#初始化串口、blog文件名称self.my_serial serial.Serial()self.my_…...

凡科二级网站怎么做/推广软件赚钱违法吗

http://tengine.taobao.org/book/chapter_05.html nginx 的三大模块 handler filter upstream 链接主要介绍这个。...

重庆网站制作公司靠谱吗/html网页设计模板

TensorBoard简介 TensorBoard是TensorFlow自带的一个强大的可视化工具&#xff0c;也是一个Web应用程序套件。TensorBoard目前支持7种可视化&#xff0c;Scalars,Images,Audio,Grap…...