链表经典面试题三

《数据结构》十道链表经典面试题多种方法深度解析 《数据结构》十道链表经典面试题多种方法深度解析,配有图解深度挖掘各种细节问题,打好根基,为冲击金丹期做准备。 阅读详情

题型十一:判断单链表是否带环,若带环,求出环的长度,环的入口点,

1、判断是否带环:

判断一个链表是否带环的带环的条件是,当链表不带环时尾节点指向空,当链表带环时,链表没有尾节点。

ListNode* IsCycle(ListNode* pHead)//判断链表是否带环,若带环,返回快慢指针相遇的节点
{
     ListNode* cur = pHead;
     ListNode* slow = pHead;
     ListNode* fast = pHead;
     while (cur)
     {
          cur = cur->pNext;
          while (fast&&fast->pNext)
          {
              slow = slow->pNext;
              fast = fast->pNext->pNext;
              if (slow->data == fast->data)
              {
                   return slow;
              }
          }
     }
     return NULL;//不带环,最后一个节点指向NULL
}

2、求环的长度:

分析:用快慢指针遍历这个带环的链表,当快慢指针指向的节点相等时,那么此时,这个节点一定在环内,在从这个节点出发,节点将会一直在这个环里面遍历,当再次回到快慢指针相遇的节点处,刚好遍历完整个环,再次过程中,用一个计数器计数,就可以记录下整个环的长度。

int GetLenth(ListNode* pHead)
{
     ListNode* meet;
     ListNode* cur;
     meet = IsCycle(pHead);
     int count=0;
     cur = meet->pNext;
     while (cur->data != meet->data)
     {
          cur = cur->pNext;
          count++;
     }
     return count;
}

3、求环的入口点:

分析:

题型十二:判断两个链表是否相交,若相交,求交点(假设链表不带环)

分析:第一步,判断两个链表是否相交,相交的两个链表一定满足两个链表的倒数第一个节点是相同的,根据这个条件就可以很轻松的写出代码了。
第二步:求两个链表的交点,那么也就是说找到找到两个相交链表中第一个相同的节点。分别求两个链表的长度,求出长度之差k,让长链表先走k步,两个链表再一起往后走,直到两个节点相遇,返回这个相遇的值,就是两个链表的交点。代码如下:

判断是否相交:

int IsIntersect(ListNode* List1, ListNode* List2)
{
     ListNode* tail1 = List1;
     ListNode* tail2 = List2;
     while (tail1->pNext)
     {
          tail1 = tail1->pNext;
     }
     while (tail2->pNext)
     {
          tail2 = tail2->pNext;
     }
     if (tail1->data == tail2->data)
     {
          return 1;
     }
     else
          return 0;
}

找出两个相交链表的交点:

ListNode* MeetNode(ListNode* List1, ListNode* List2)
{
     int l1 = ListLength(List1);
     int l2 = ListLength(List2);
     int k = abs(l1 - l2);
     int ret = IsIntersect(List1, List2);
     ListNode* cur1 = List1;
     ListNode* cur2 = List2;
     if (ret = 0)
          return NULL;
     else
     {
          if (l1 >= l2)
          {
              while (k)
              {
                   cur1 = cur1->pNext;
                   k--;
              }
              while (cur1->data != cur2->data)
              {
                   cur1 = cur1->pNext;
                   cur2 = cur2->pNext;
              }
              return cur1;
          }
          cur1 = List1;
          cur2 = List2;
          if (l1 < l2)
          {
              while (k)
              {
                   cur2 = cur2->pNext;
                   k--;
              }
              while (cur1->data != cur2->data)
              {
                   cur1 = cur1->pNext;
                   cur2 = cur2->pNext;
              }
              return List1;
          }
     }

}

题型十二:判断两个链表是否相交,若相交,求交点(假设链表可能带环)
这个题型就有些复杂了,它包含了很多情况,




情况一和情况二都是无环链表的知识,在题型十一就有详细的解释。情况三、一个链表带环,一个链表不带环,这样的两个链表一定是不相交的。当两个链表都带环时,分为 三种情况两个链表不想交,交点在环外,交点在环内。分别求出两个链表的环的入口点,如果两个链表的入口点是相同的那么就是环外相交,如果两个链表环的入口点不相同,那么就是情况六,环内相交。

告别抖动与滞后:深入博能传动伺服DSC功能,用105报文提升多轴同步性能 本文深入解析博能传动伺服DSC功能如何通过105报文实现多轴同步性能提升,有效解决工业自动化中的抖动与滞后问题。详细介绍了DSC技术原理、105报文实现机制及多轴同步工程实践,帮助工程师优化伺服系统性能,实现绝对齿轮同步。 阅读详情

相关推荐

STM32H723ZGT6-单ADC极限采样率实战与分辨率权衡

本文通过实战测试,深入探讨了STM32H723ZGT6微控制器中单ADC模块的极限性能。文章详细展示了如何通过CubeMX配置时钟树、ADC参数、定时器触发与DMA,实测得出在16位分辨率下最高稳定采样率约为4.6MHz,而将分辨率降至8位后,采样率可提升至约6.2MHz,并分析了速度与分辨率之间的关键权衡,为高速数据采集项目提供选型与优化参考。

weixin_29240711的博客 297

10道经典链表面试题

目录 1.删除链表中等于给定值val的所有节点 2.反转一个单链表 3.给定一个带有头结点head的非空单链表,返回链表的中间结点。如果有两个中间结点,则 返回第二个中间结点 4.输入一个链表,输出该链表中倒数第k个结点 5.将两个有序链表合并为一个新的有序链表并返回。新链表是通过拼接给定的两个链表的所 有节点组成的 6. 编写代码,以给定值x为基准将链表分割成两部分,所有小于x的结点排在大于或等于x的 结点之前 7. 链表的回文结构 8. 输入两个链表,找出它们.........

xaiobit_hl的博客 4287

FPGA实战:MIG IP核AXI接口DDR3读写优化指南

本文详细解析了FPGA中MIG IP核AXI接口的DDR3读写优化策略,涵盖关键参数配置、突发传输技巧及时序收敛方案。通过AXI接口优化和突发长度选择,可实现高达12.8GB/s的理论带宽,提升DDR3访问效率。文章还提供了Vivado配置实例和调试技巧,助力开发者解决FPGA内存控制中的实际问题。

weixin_29168393的博客 545

【数据结构】7道经典链表面试题

题目描述: 给你一个链表的头节点head,判断链表中是否有环。 如果链表中有某个节点,可以通过连续跟踪next指针再次到达,则链表中存在环。 为了表示给定链表中的环,评测系统内部使用整数pos来表示链表尾连接到链表中的位置(索引从 0 开始)。注意:pos不作为参数进行传递。仅仅是为了标识链表的实际情况。 如果链表中存在环,则返回true。 否则,返回false。 题目描述: 给定一个链表的头节点 head,返回链表开始入环的第一个节点。如果链表无环,则返回null

2302_81312180的博客 1882

NX/UG二次开发—CAM—设置程序修剪边界Boundary

最近做了一个设置CAM程序边界的小工具,分享一下经验(官方的代码在文章末尾处),以下均以修剪边界曲线为例。 以下为官方提供的源码: /***************************** Include Files **********************************/ #include <stdlib.h> #include <uf.h> #include <uf_obj.h> #include <uf_object_type

门前大桥下,游过一群鸭,快来看一看,原来是C++ 3732

第十九届全国大学生智能车竞赛越野信标 硬件篇

全国大学生智能汽车竞赛,越野信标组

2301_77568650的博客 4114

【数据结构】10道经典面试题目带你玩转链表

10道关于链表的经典面试题目:包含移除链表元素,反转链表,链表的中间结点,链表中倒数第K个结点,合并两个有序链表,链表分割,链表的回文结构,相交链表,环形链表,环形链表找入环点等题目的解题思路图解及完整解题代码.

C/C++领域,数据结构,linux,MySQl学习者 2379

2019年7月28日解决战网BLZBNTBNA00000005BLZBNTBNA00000006BLZBNTBTS0000005DBLZBNTBTS0000004A 007D0 008A4 00840

Blizzard—Battle.net—2019年7月28解决战网BLZBNTBNA00000005BLZBNTBNA00000006BLZBNTBTS0000005DBLZBNTBTS0000004A 007D0 008A4 008402019年7月28日再次更新写在前面■■■ 排查网路问题 ■■■■■■ 排查电脑自身问题 ■■■■尝试重置internet设置■网络的设置和防火墙规则■如果还是不...

MCGC高质人类协作会-MCG贴吧 3万+

链表常见面试题( 建议收藏!!)

链表面试题????1.删除链表中等于给定值 val 的所有节点2.二级目录3.三级目录 1.删除链表中等于给定值 val 的所有节点 题目: 题目链接: https://leetcode-cn.com/problems/remove-linked-list-elements/. 思考: 用tmp记录当前节点,若tmp 的下一个节点不为空且下一个节点的节点值等于给定的 val,则需要删除tmp的下一个节点 2.二级目录 3.三级目录 ...

一朵花花 4624

14、X射线图像处理与特征提取全解析

本文全面解析了X射线图像处理与特征提取的关键技术,涵盖图像预处理、滤波、边缘检测、分割与恢复等流程,并深入探讨了几何特征(如面积、周长、圆度、椭圆拟合)、强度特征(均值、方差、对比度)、傅里叶描述符、不变矩(Hu矩、Gupta矩)以及局部描述符(SIFT、SURF)和稀疏表示方法。同时介绍了特征选择的过滤法、包装法和嵌入法,并结合Matlab代码示例展示了各类特征的实际提取过程。文章最后总结了当前技术的应用现状,并展望了深度学习在X射线图像分析中的未来潜力。

pz89012345的博客 133

无刷电机FOC硬件电路设计

本文先对MIT无刷电机FOC硬件电路分析做个简单的介绍,具体内容后续再更,其他模块可以参考去我其他文章软件程序在我另外一个博客【嵌入式–伺服电机】MIT无刷电机FOC驱动程序分析。

qq_35635374的博客 574

别说链表不重要(三):链表高频面试题、经典问题一篇搞定

链表高频面试题、经典问题 关于我 decs: 19年毕业的前端开发一枚,沉迷Js 花名: 余光 E-mail: webbj97@163.com 个人博客: 优快云 GitHub: 传送门 经典问题 在阅读了单链表原理和双指针技技巧后,我们仍然在LeeCode上找出几个经典面试题,以此加强掌握。 一、反转链表 思路 我们接受到链表 [1, 2, 3, 4, 5] 首先,我们将head结点的...

余光的博客 1568

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

链表经典面试题(三)

合并有序链表

m0_73111651的博客 142

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

经典面试题精讲:C语言实现随机链表的复制(附最优解)

本文探讨了循环队列的设计与实现方法。循环队列是一种首尾相连的环形结构,具有固定空间、队头删除、队尾插入等特点。文章比较了链表和数组两种实现方式,指出数组实现更节省内存且简单。重点分析了数组实现时的关键问题:如何区分队列空和满状态。解决方案是通过多开辟一个空间,利用(rear+1)%(k+1)==front判断满状态,而front==rear表示空状态。文章提供了完整的代码实现框架,包括结构体定义、初始化、插入删除操作及判断空满状态的方法。这种实现方式避免了额外计数器变量的使用,提高了空间效率。

watergraphically的博客 1273

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

【单链表经典面试题解析三】在无头单链表的一个非头节点前插入一个节点(要求不能遍历单链表)

每次再遇到单链表的题时,别慌,先好好审题,抓住重点。这道题其实很简单,只要注意到题目的重点,首先是非头结点,然后是前差一个新节点,再就是要求不能遍历单链表。    我们可以先给单链表的一个非头结点后插一个新节点,这个很简单,很容易完成吧,但是好像和题目有点不一样,没关系,我们再把这个非头结点和新节点值给换一换,这样就符合题目要求了,是不是很机智呢!不过感觉文字描述的不太好,看得云里雾里的,接下来

sofia_m的博客 1012

【数据结构与算法】第7篇:线性表(三):单链表的经典面试题(反转、找中间节点)

上一篇我们实现了单链表的基本操作。这一篇来点实战,讲几个单链表的经典面试题。反转链表、找中间节点、判断是否有环、找倒数第k个节点,这些都是面试高频题。我们会用C语言指针来实现,重点讲清楚快慢指针这个常用技巧。纯算法篇,不涉及具体应用,专注代码逻辑。

2301_80672009的博客 381

链表经典面试题

1.删除链表中等于给定值的所有结点1.删除链表中等于给定值的所有结点2.反转一个单链表这里我们需要在原链表中进行操作我们定义三个指针如下图所示:接下来就是改变l2指针的next指向l1之后l1指针走到l2,l2走到l3,l3走到l2的next,不断循环一直到l2为空指针这里有一个小细节如下图。

GOATLong的博客 3069

链表经典面试题上

链表经典面试题详解

A13569039691的博客 2319

链表经典面试题01

首先题目要求判断两个链表是否相交,若相交返回相交的起始节点,否侧返回NULL,那么第一个问题如何判断两个链表是否相交呢?这次的题均来自力扣和牛客有关链表的经典面试题,代码只会展示最优的解法,之前发布过单链表的经典算法--这里就涉及了两个算法,一个是找到链表的中间节点并返回,一个是翻转链表.这两个算法大家可以去看。,请你找出并返回两个单链表相交的起始节点。给你两个单链表的头节点。本题相对原题稍作改动。

wer24_25的博客 1827

顺序表和链表经典面试题

经典面试题讲解

黄超的博客 1282

链表经典面试题下

链表经典面试题目详解下

A13569039691的博客 1425

【经典面试题】单链表的常见面试题

单链表的常见面试题

lolly1023的博客 1424

链表之十大经典面试题

快速学习链表面试题

weixin_64702703的博客 1797

【庖丁解牛:经典面试题之链表】

匠心制作,实属不易,带你玩转经典链表面试题

心归 906

大厂高频经典面试题-《链表合集》

本文深入剖析链表相关的面试题,收集的都是互联网大厂高频问到的题库。

849
上一篇: 链表经典面试题二
下一篇: linux常用指令说明,及linux下常用目录说明
ffsiwei
博客等级 码龄9年 72粉丝 63原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值