问题

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

回答
找单链表的中间节点,有个特别巧妙的方法,不需要知道链表的总长度,而且速度也很快。

想象一下,你拿着两根筷子,同时从链表的头开始往下走。其中一根筷子走得飞快,一次跳两格。另一根筷子呢,就走得很稳健,一次只跳一格。

那么,当那根走得飞快的筷子走到链表的末尾,或者说它已经无法再跳两格(因为它后面已经没有节点了),这时候,那根走得慢的筷子,它现在所在的位置,就是链表的中间节点了。

是不是很简单?

为什么会这样呢?

快指针(走得快的):每次移动两步。
慢指针(走得慢的):每次移动一步。

当快指针到达链表的末尾时,它走了大约是链表总长度的两倍的距离。而慢指针只走了一半的距离。所以,慢指针自然而然地就停在了链表的中间位置。

举个例子:

假设链表是: A > B > C > D > E > NULL

1. 开始:
慢指针:指向 A
快指针:指向 A

2. 第一次移动:
慢指针:指向 B
快指针:指向 C (跳过了 B)

3. 第二次移动:
慢指针:指向 C
快指针:指向 E (跳过了 D)

4. 第三次移动:
慢指针:指向 D
快指针:已经到 E,下一次要跳两格,但 E 后面是 NULL,它无法再跳两格了。

这时候,快指针的下一步操作会失败(尝试访问 E.next.next)。我们就可以停止了。

此时,慢指针指向的就是 D,它正是这个链表的中间节点。

如果链表长度是偶数,比如 A > B > C > D > NULL

1. 开始:
慢指针:A
快指针:A

2. 第一次移动:
慢指针:B
快指针:C

3. 第二次移动:
慢指针:C
快指针:C.next.next(即 NULL)

这时,快指针到达了 NULL。停止。

此时,慢指针指向的是 C。在这个偶数长度的链表中,C 通常被认为是“中间靠后”的那个节点。如果你想找“中间靠前”的那个节点(B),你可以稍微调整一下快指针的停止条件,或者在快指针走到 NULL 的前一步就停止。但通常来说,这种方法找出的 C 是符合要求的。

这种方法的优势在于:

无需知道长度:不用事先遍历一次统计长度。
一次遍历:只需要从头到尾走一次(虽然是两个指针在走,但整体的步骤数与链表长度成正比)。
简单高效:代码实现起来非常直观,而且效率很高。

这就是利用“快慢指针”来找到单链表中间节点的方法。

网友意见

user avatar

程序员看到算法就容易High起来,但老实说外行看热闹,内行看门道。我一直觉得算法这个东西用什么精妙来形容,算得上是外行看热闹。

在这个问题的答案下,有两个算法:

分别是

@蔡啸

@Irons Du

提供的,很显然前者的算法看起来比较精妙,而后者的算法看起来简直就是low爆了。

但事实上,不考虑vector扩容开销的话,这俩算法的时间复杂度都是O(n),前者的优势在于其只需要俩指针空间,后者则直接把整个链表变成了一个vector,

也就是说后者是用空间换时间。


所以说这个看似很low的算法也是有其意义的,因为这个很low的算法通过指针获取元素的次数只有n+1或n次,而前者则需要获取n+n/2次。

当然,我们知道通过指针获取元素的性能是极高的,而且,1.5n和n+1的时间复杂度都是O(n)。但是如果通过指针获取元素的性能变得极差的时候(例如根本就是个远程调用的话),那么这种low爆的算法就会摇身一变成为最精妙的算法,而原来精妙的算法又会变为最SB的做法了。


算法没有高下之分,场景才是最重要的。


一个程序员成熟的标志就是从看到算法就会high,到看到薪酬才会high,,XD,,,,

类似的话题

  • 回答
    找单链表的中间节点,有个特别巧妙的方法,不需要知道链表的总长度,而且速度也很快。想象一下,你拿着两根筷子,同时从链表的头开始往下走。其中一根筷子走得飞快,一次跳两格。另一根筷子呢,就走得很稳健,一次只跳一格。那么,当那根走得飞快的筷子走到链表的末尾,或者说它已经无法再跳两格(因为它后面已经没有节点了.............
  • 回答
    江西某单位招聘岗位表中20个岗位均标注“男性”的要求,这一现象确实引起了公众的广泛关注和讨论。从法律、伦理和社会公平的角度来看,这种做法存在诸多问题,并且与国家倡导的性别平等原则相悖。如何看待江西一单位招聘岗位表显示,20个岗位都标注了要求「男性」?1. 涉嫌性别歧视,违反法律规定: .............
  • 回答
    在国企这个大染缸里,一个心思单纯的女生,想要站稳脚跟,并且发展得风生水起,确实需要点儿智慧和策略。当然,这不代表要她变得世故圆滑,而是要找到适合自己的生存之道,并且将自己的纯粹转化为一种优势。首先,明确你的优势:单纯不是弱点,是资本。很多人一听到“单纯”,就觉得是容易被欺负、没心机。但在国企,这种特.............
  • 回答
    想象一个由INFP、INFJ、INTP和INTJ四种人格类型组成的社会,那将是一幅多么奇特又迷人的景象。如果真有这样一个社群,他们的文化和政治制度,定然与我们所熟知的截然不同。文化:内省、理想与求知交织的独特精神世界在这个社会里,你会看到一种深深植根于个体内在的精神文化。 理想主义与价值观驱动:.............
  • 回答
    单亲爸爸快不快乐?这个问题,我能从心底告诉你:很快乐,但也充满了挑战,更是一份沉甸甸的责任和深刻的爱。快乐?当然有。我的快乐,很多时候是那种平凡而又闪闪发光的小确幸。比如,早上六点半,天还没全亮,我的小家伙就会像只小猫一样,悄悄钻进我的被窝,小脑袋蹭着我的脖子,奶声奶气地说一句“爸爸,起床啦”。那一.............
  • 回答
    你想找个能让你聚精会神的单机推理小游戏,对吧?而且要那种玩起来感觉很实在,不是那种一眼就能看穿的套路,对吧?我懂,我最近也迷上了一些能真正“动脑子”的小玩意儿,不像现在很多游戏,就是把剧情给你灌输一遍,然后让你点点鼠标完事儿。我最近玩过一款叫 《Unpacking》 的游戏,你听过吗?别看它名字听起.............
  • 回答
    好,既然你想找一款硬核又令人沉浸的单机射击游戏,并且希望我能像个玩遍了市面上各种枪火弹雨的老兵一样,给你好好掰扯掰扯,那我就不跟你客套了。我这就给你推荐一款,绝对能让你肾上腺素飙升,手心冒汗的好货。我要说的是 《地铁:离去》(Metro Exodus)。别被它名字里那句“地铁”给骗了,这可不是什么在.............
  • 回答
    我努力的意义,这个问题,说实话,曾经在我脑子里绕了好一阵子。尤其是在朋友圈里,看到别人家孩子咿咿呀呀,各种晒娃的盛况,有时候会觉得,自己这么拼,是为了什么?但慢慢地,我发现,这份“努力”的指向,其实比很多人想象的要广阔,也要自由得多。首先,我努力,是为了自己的“大房子”——那个真正属于我的精神世界。.............
  • 回答
    .......
  • 回答
    哎呀,这事儿可真是够我回味一阵子的。那天在单位,正忙着手头的项目,突然就被叫到领导办公室。敲门进去,领导坐在办公桌后,脸上带着点探究的表情,我心里咯噔一下。领导抬头看了我一眼,然后慢悠悠地开口:“你是xxx的儿子吧?”我当时脑子有点懵,不是因为这问题本身,而是因为被这么直接地问出来,总感觉有点不对劲.............
  • 回答
    造一辆单人火车轨道车并试图使用它,你被抓到的速度,那可真是得看运气、时机,以及你究竟把这“交通工具”开到哪儿去了。我给你细细道来,就像在你耳边说悄悄话一样,保证不是那种干巴巴的AI报告。首先,咱们得明确一个事儿:在中国(或其他大多数有铁路的国家),铁路是国家高度管制的公共设施。 它不像你家后院,想怎.............
  • 回答
    很多人在讨论“马赫”是不是一个单位时,会陷入一种有点儿固执的僵局。简单来说,马赫(Mach)本身不是一个独立的、像米、秒、千克那样的基本物理量单位,但它是一个用来衡量速度的“约定俗成”的单位,它的数值代表了相对于某个参考状态下声速的比值。 这么说可能有点绕,咱们一点点捋清楚。想象一下,我们测量物体的.............
  • 回答
    问自己一句:到底想不想入手单反?这个问题看似简单,但背后却藏着不少你想弄明白的道理。别急着拍脑袋决定,咱们一点一点捋清楚。首先,你对摄影到底有多大兴趣?这才是问题的核心。别听别人说单反“高级”、“专业”,就一头热。你是不是真的喜欢拿起相机,去捕捉生活中的美好瞬间?是不是愿意花时间去学习怎么构图、怎么.............
  • 回答
    这个问题很有意思,也触及了很多生活中的实际感受。十年前的物价水平和现在的对比,确实能让人感叹一番。为什么会出现这种“汉堡稳定,肉夹馍飞涨”的现象?这背后涉及的因素其实挺复杂的,咱们一块儿掰扯掰扯。首先,得认识到“十年前”是个啥概念。 十年前,也就是大约2014年左右,那会儿整个社会的消费水平、生产成.............
  • 回答
    你好!听到你这么直接地说“不追了”,我感到既佩服又有点替你感到惋惜。不过,既然你已经做了这个决定,那我们就来详细分析一下,在目前这种“不追”的状态下,你和这位单亲妈妈同事之间,未来还能不能继续,以及应该如何处理。首先,我们需要明确一个概念:“不追”并不意味着完全断绝联系,而是调整了你在追求她这件事上.............
  • 回答
    好,咱们来聊聊动铁耳机这玩意儿,尤其是它一个单元和多个单元到底是怎么回事儿, работать原理究竟啥样。别担心,我尽量给你说得明明白白,不绕弯子,也尽量让人听着舒服,不像那种AI生搬硬套的玩意儿。先说动铁耳机是啥玩意儿,为啥叫“动铁”你听这名字,“动铁”,顾名思义,里面肯定有铁。但它不是那种老式.............
  • 回答
    在医疗过程中,医生为了确保诊疗的规范性和患者的隐私,会根据情况采取不同的做法。您提到的男医生在为女病人进行腹部和盆腔检查时,叫来一位女护士在场,这是一种非常常见的做法,也是一种对患者负责任的体现。为什么医生会这样做?1. 保障患者隐私和权益: 尽管医生和护士都受过职业道德培训,但对于一些涉及身体私.............
  • 回答
    想组建一个单人乐队?那可真是个充满挑战又乐趣无穷的念头!这可不是简简单单能“玩玩”就能成功的,它需要你十八般武艺样样精通,或者至少在某个领域有压倒性的优势,再辅以大量的实践和钻研。下面我就跟你掰扯掰扯,作为一个单人乐队,你需要具备哪些“硬核”技能,以及这些技能具体要求到什么程度,尽量让你听起来就像是.............
  • 回答
    要证明一个单群 $G$ 的阶 $|G| le 3$ 在其子群 $H$ 的指数 $[G:H] le 4$ 的条件下,我们需要结合单群的定义、拉格朗日定理以及群论中的一些关键构造性结果来一步步推理。1. 理解问题的核心:单群与子群指数首先,我们来梳理一下问题中的关键概念: 单群 (Simple Gr.............
  • 回答
    英语中有一些词汇,它们在特定的语境下,其涵盖的意义、情感和文化内涵,用中文的单个词汇是很难完全对等的,需要一番解释和铺陈才能接近其原意。举个例子,英语中有一个词叫“serendipity”。这个词指的是一种“意外发现珍宝的运气”或者“在寻找A时偶然发现了B,而B比A更有价值”的经历。它强调的是一种偶.............

本站所有内容均为互联网搜索引擎提供的公开搜索信息,本站不存储任何数据与内容,任何内容与数据均与本站无关,如有需要请联系相关搜索引擎包括但不限于百度google,bing,sogou

© 2025 tinynews.org All Rights Reserved. 百科问答小站 版权所有