一个单链表,长度未知,如何快速的找出位于中间的那个元素

问题:

一个单链表,长度未知,如何快速的找出位于中间的那个元素?

 

方法一:

设置两个指针,p1,p2, 开始p1,p2均位于链接的头部。
p1 每次步进两步,
p2 每次步进一步
当p1到达链表的末尾时,p2所在的位置就是链表的中间元素

快速找到未知长度单链表的中间节点(百度) 有道算法面试题:快速找到未知长度单链表的中间节点。 【1】你可以普通方法也可用比较好的方法,去解决这个问题。由于单链表不知道长 度,必须遍历完整个单链表才知道单恋表的长度,然后根据一般的长度去找中间结 点,这是普通方法。 【2】当然题目问的是快速找到,当然要用快速的方法啦。这里我们快慢指针的方法 来解决这个问题,快指针每次走2个结点,慢指针每次走1个结点,当快指针走完链表 ,慢指针刚好走到中间,这... 阅读详情

相关推荐

快速寻找单链表中间元素结点

忘记什么时候做的笔试题了。记忆力差没办法。 一看到这倒题目,下意识的想到的解决方案便是首先循环遍历链表获得链表长度Len,然后再次循环遍历链表查找Len/2处的中间节点。在这种情况下,其时间复杂度由两次循环决定:O(L+L/2)=O(3L/2)。 尽管这种思路也能解决问题,但也许存在更好的方法。上次我们谈到利用双指针来寻找链表中倒数第N个元素结点,现在我们同样也可以利用双指针来查找中间节点:

Floating Cat 1528

数据结构——单链表的查找、求单链表长度、单链表的创建

若没有维护指向链表最后一个节点的指针,每次插入操作的时间复杂度为O(n),因为需要找到当前最后一个节点。此外,链表的操作也体现了算法设计中的权衡,比如时间复杂度和空间复杂度的考虑,以及特定场景下算法选择的重要性。每次插入操作的时间复杂度为O(1),但建立整个链表的平均时间复杂度为O(n),因为要插入n个元素。最后,掌握链表的操作也是理解更复杂数据结构如树和图的基础,因为这些结构中都包含了链表的概念。总之,链表不仅是学习数据结构的重要一环,它的概念和操作也贯穿在计算机科学的多个领域中。

xixixi7777的博客 6351

python提取图片中的文字写入excel文件,并打包为exe可执行文件

python提取图片中的文字写入excel文件,并打包为exe可执行文件

liqiang12689的博客 989

单链表查找中间元素

int ListLinkSearch(Node *head) { if(head == NULL) { return FAILURE; } Node *current = head->next; Node *middle = head->next; int i = j = 0; while(current !...

weixin_42720316的博客 2391

Couldn‘t find device with uuid 恢复LVM元数据 linux

Couldn't find device with uuid 恢复LVM元数据 linux欢迎使用Markdown编辑器新的改变功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富你的文章UML 图表FLowchart流程图导出与导入导出导入 欢迎使用Markdown编辑器 你好! 这是你第一次使

m0_57559579的博客 7166

codesys【modbusRTU】主站

【代码】modbusRTU【codesys】

cfqq1989的博客 4370

寻找单链表的中间元素

寻找单链表的中间元素 单链表元素个数如果为奇数个则正常输出中间元素即可,若单链表元素个数为偶数个则将两个中间元素都输出。 代码如下: #include<stdio.h> #include <malloc.h> #include<stdbool.h>//C语言中要用bool类型时 需要用此文件名,若没有此文件 就无法使用bool typedef int Elem...

Change_Improve的博客 1441

零基础玩转NILM:用nilmtk提取UKDALE电器数据的保姆级教程

本文为零基础用户提供了一份详细的NILM入门指南,重点讲解如何使用nilmtk工具包从UKDALE数据集中提取电器级用电数据。教程涵盖环境搭建、核心概念解析、数据提取实战及常见问题排查,帮助读者快速掌握非侵入式负荷监测的数据预处理关键步骤。

rgv234567的博客 498

单链表的查找(按位查找和元素查找)

目录 1.单链表的按照位序查找 2.单链表的按照元素查找 单链表的按照位序查找 1.按位序查找的函数结构: LNode *LocateNode(LinkList LL, unsigned ii) 函数定义采用的是自己定义的链表结构体LNode,因为在此处找到之后返回的是该结点的地址,所以采取指针形式。函数的参数有两个,第一个参数是完整单链表的地址,第二个是所要查找的结点位序。 2.函数的代码: LNode *LocateNode(LinkList LL, unsigned...

m0_54376461的博客 1万+

万字长文,小白新手怎么开始做YOLO实验,从零开始教!整体思路在这里,科研指南针!

万字长文,小白新手怎么开始做YOLO实验,从零开始教!整体思路在这里,科研指南针!

Coding... 1万+

UI渲染顺序:合批为何被拆碎?

在 Hierarchy 中,避免出现:Image(列表1) → Text(列表1) → 特效 → Image(列表2) → Text(列表2)…若可行,在逻辑上把布局组织成“同类元素集中”:例如:列表行中,Image 集中、Text 集中;或者接受 Text 本身就拆出一批,关键是不要在 Text 中间再插入别的材质。现实中不一定能做到完美的“所有 Image 连在一起”,但你会有一个意识:同一 Canvas 内,如果你把不同材质的元素交错穿插,

本博客聚焦游戏开发技巧、创业实战心得及大学热门课程干货。这里既有技术深度,也有思维广度,无论你是开发者、创业者还是高校学子,都能在这里找到适合自己的成长之路! 84

百度面试题:一个单链表,长度未知,如何快速的找出位于中间的那个元素

问题: 一个单链表,长度未知,如何快速的找出位于中间的那个元素?   设置两个指针,p1,p2, 开始p1,p2均位于链接的头部。 p1 每次步进两步, p2 每次步进一步 当p1到达链表的末尾时,p2所在的位置就是链表的中间元素 时间复杂度为O(n)   详细情况请见代码: [cpp] view plaincopy

心有多大,舞台就有多宽 1472

YOLOv5改进 | 低照度检测 | 2024最新改进CPA-Enhancer链式思考网络(适用低照度、图像去雾、雨天、雪天)

本文给大家带来的2024.3月份最新改进机制,由CPA-Enhancer: Chain-of-Thought Prompted Adaptive Enhancer for Object Detection under Unknown Degradations论文提出的CPA-Enhancer链式思考网络CPA-Enhancer通过引入链式思考提示机制,实现了对未知退化条件下图像的自适应增强。该方法的核心在于能够利用CoT提示对图像退化进行动态分析和适应,从而显著提升物体检测性能。

Snu77的博客 2222

一个有头尾的单链表,长度未知,如何快速的找出位于中间的那个元素?

设置两个指针,p1,p2, 开始p1,p2均位于链接的头部。 p1 每次步进两步, p2 每次步进一步 当p1到达链表的末尾时,p2所在的位置就是链表的中间元素 这个题目在给一个递增的链表转换成二分查找树时用到了。 发现很多算法题都会用到双指针!

阳光明媚 1044

YOLO11改进策略【独家融合改进】| RCSOSA + SPD + WFU

SPD-Conv是一种新的 CNN 构建模块,用于替代传统 CNN 架构中使用的步长卷积(strided convolution)和池化(pooling)层,它由空间到深度(Space-to-depth,SPD)层和非步长卷积(non - strided convolution)层组成。WFU模块通过小波变换的频率分解与跨尺度融合机制,解决了传统上采样过程中的混叠和细节丢失问题,实现了高效、高保真的面部细节重建。

Limiiiing的博客 448

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

腾讯面试题:快速找到未知长度单链表的中间结点

快速找到未知长度的单链表的中间节点 普通方法就是遍历两次,第一次遍历得到链表长度,第二次遍历得到中间值。时间复杂度为1.5n。(这里需要强调1.5) 快速链表方法就是利用两个指针,慢指针每次移动一个数据,快指针每次移动两个数据。最外层的循环用快指针。当快指针遍历完后,内层慢指针刚好循环到一半。时间复杂度为0.5n。代码如下: class GetMidVaule(LinkList L, elm...

王其的博客 545

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

如何快速找到未知长度单链表的中间节点

**题目描述:**给定一个未知长度的单链表,如何找到该链表的中间的节点? **解决思路:**①遍历该链表,获得该链表的长度,则确定了中间节点的位置,之后再从头遍历至中间节点。②设置快慢指针*tail、mid,tail的移动速度是mid移动速度的两倍。当tail移动到末尾时,*mid就移动到了中间节点。 ...

写写代码 1027

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

快速找到未知长度单链表的中间节点

http://blog.fishc.com/1936.html  题目:快速找到未知长度单链表的中间节点。 既然是面试题就一定有普通方法和高级方法,而高级方法无疑会让面试官大大加分! 普通的方法很简单,首先遍历一遍单链表以确定单链表的长度L。然后再次从头节点出发循环L/2次找到单链表的中间节点。 算法复杂度为:O(L+L/2)=O(3L/2)。   能否再优化一下这个时间复杂度呢?

f81892461的专栏 3282

快速找到未知长度单链表的中间结点

快速找到未知长度单链表的中间结点 采取的方法为快满指针的方法,具体思想就是,定义两个指针A,B分别指向头结点,让它们从头结点开始跑,A指针依次指向下面的结点,而B指针是隔着一个结点指向下一个结点,那么当B指针指向末尾结点的时候,A指针刚好指向中间结点了。 code如下: typedef float ElemType; typedef struct Node { El

u011484045的专栏 1679

【java数据结构与算法学习】快慢指针---快速找到未知长度单链表的中间节点

如题:快速找到未知长度单链表的中间节点第一种方法是大多人都能想到的方法:先遍历整个链表得到链表的长度,然后遍历链表的一半,找到链表的中间节点。此操作的时间复杂度是O(n)+O(n/2) = O(3n/2),该方法就不再进行代码的展示了。第二种方法就比较巧妙了,是运用的快慢指针的原理。我们设置两个指针,其中一个指针移动的速度是另一个指针移动速度的两倍,这样当快的指针移动到链表结束位置的时候,慢的指针...

Zer01ne的博客 1275

面试题:如何快速查找未知长度单链表的中间节点?

面试题:如何快速查找未知长度单链表的中间节点?背景方法普通方法原理代码高级方法原理代码实验过程及结果总代码运行结果总结 背景 偶然接触到一面试题:如何快速查找未知长度单链表的中间节点? 方法 首先想到就是很简单的遍历方法,然后又得知一种快慢指针的方法。 普通方法 原理 普通方法很简单,首先遍历一遍单链表以确定单链表的长度。然后再次从头节点出发循环N/2次即可找到单链表的中间节点。 算法的复杂度为O(N+N/2)=O(3N/2)。 代码 void common_found_List(Linklist *L,i

MZYYZT的博客 767

快速查找未知长度单链表的中间节点

普通的方法很简单,首先遍历一遍单链表以确定单链表的长度L。然后再次从头节点出发循环L/2次找到单链表的中间节点。算法复杂度为O(L+L/2)=O(3L/2)。 能否再优化一下这个时间复杂度呢?有一个很巧妙的方法:设置两个指针* fast、*slow都指向单链表的头节点。其中* fast的移动速度是* slow的2倍。当* fast指向末尾节点的时候,slow正好就在中间了。这一点利用了在解决判断

leona2108的专栏 723
上一篇: 程序员总结:帮助你早些明白一些道理
下一篇: java面试题及答案(一)
SleepInDelphi
博客等级 码龄19年 32粉丝 388原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值