【链表OJ 3】链表的中间结点

这篇具有很好参考价值的文章主要介绍了【链表OJ 3】链表的中间结点。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

前言: 

        本文收录于http://t.csdn.cn/n6UEP数据结构刷题的博客中,首先欢迎大家的来访,其次如有错误,非常欢迎大家的指正!我会及时更正错误!

目录

一.链表的中间结点 

1.1原理:快慢指针的使用

链表元素个数为奇数时

链表元素个数为偶数时

1.2循环条件问题?


一.链表的中间结点 

来源:876. 链表的中间结点 - 力扣(LeetCode)

题目:

【链表OJ 3】链表的中间结点,C--数据结构刷题,算法,数据结构,c语言,笔记,vscode,开发语言

1.1原理:快慢指针的使用

这个算法之所以有效,是因为fast指针的移动速度是slow指针的两倍。

快慢指针的精妙之处在于,当快指针移动到链表尾部时,慢指针就刚好移动了链表长度的一半,从而找到中间节点。因此当,fast指针到达链表尾部时,slow指针将正好指向链表的中间节点。无论链表长度奇偶,这个方法都可以在一次遍历正确找到中间节点。

时间复杂度:O(n),因为只遍历链表一次。
空间复杂度:O(1),因为没有使用额外的空间。

整体思路:

  1. 函数以指向链表头部的指针作为参数。

  2. 初始化两个指针 slow  fast,它们都指向链表的头部。

  3. 进入一个循环,只要fast不为NULL且fast->next不为NULL,循环会继续执行。这个循环用于通过链表前进指针。

  4. 每次循环迭代中,slow 指针向前移动一步,通过赋值slow = slow-> next

  5. fast指针向前移动两步,通过赋值fast = fast -> next -> next

  6. 当循环结束时,slow 指针将指向链表的中间节点。这是因为fast指针的移动速度是slow指针的两倍,当 fast指针到达链表尾部时,slow指针刚好在链表的中间。

  7. 最后,函数返回slow指针,即链表的中间节点。

链表元素个数为奇数

动图演示:

【链表OJ 3】链表的中间结点,C--数据结构刷题,算法,数据结构,c语言,笔记,vscode,开发语言

链表元素个数为偶数

返回第二个中间结点的原因是题目要求:

【链表OJ 3】链表的中间结点,C--数据结构刷题,算法,数据结构,c语言,笔记,vscode,开发语言

 动图演示:

【链表OJ 3】链表的中间结点,C--数据结构刷题,算法,数据结构,c语言,笔记,vscode,开发语言

1.2循环条件问题?

循环条件不能调换顺序:

while 循环条件 fast && fast->next 不能写成 fast->next && fast 的目的是为了确保在遍历链表时不会出现空指针异常

如果将循环条件调换为fast->next&& fast ,在链表长度为奇数时,当快指针 fast指向最后一个节点时,fast->next仍然不为NULL,但此时fast已经为NULL,这样会导致在访问fastnext指针时出现错误。

通过保持条件为fast && fast->next ,可以确保在fast 和 fast->next 每次迭代中,快指针都不为NULL,从而避免了空指针的访问错误。这是正确处理快慢指针遍历的关键。

因此,为了保证代码的正确性,应该保持原始代码中的循环条件不变,即fast && fast->next

代码实现

struct ListNode* middleNode(struct ListNode* head){
      struct ListNode* slow=head,*fast=head;
      while(fast && fast->next)
      {
            slow=slow->next;
            fast=fast->next->next;
       }
       return slow;
}

代码执行:

【链表OJ 3】链表的中间结点,C--数据结构刷题,算法,数据结构,c语言,笔记,vscode,开发语言

        本文到此结束,如有错误欢迎大家指正,感谢来访!文章来源地址https://www.toymoban.com/news/detail-634210.html

到了这里,关于【链表OJ 3】链表的中间结点的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 反转链表、链表的中间结点、合并两个有序链表【LeetCode刷题日志】

    给你单链表的头节点 head ,请你反转链表,并返回反转后的链表。 力扣(LeetCode)官网 - 全球极客挚爱的技术成长平台 这里解释一下三个指针的作用: n1:记录上一个节点,如果是第一个就指向空 n2:记录此节点的位置 n3:记录下一个节点的位置,让翻转后能找到下一个节点

    2024年02月03日
    浏览(38)
  • 【数据结构OJ题】链表中倒数第k个结点

    原题链接:https://www.nowcoder.com/practice/529d3ae5a407492994ad2a246518148a?tpId=13tqId=11167rp=2ru=/activity/ojqru=/ta/coding-interviews/question-ranking 目录 1. 题目描述 2. 思路分析 3. 代码实现 快慢指针法   (如果有小伙伴不了解快慢指针法,可以看看这篇文章:https://blog.csdn.net/m0_62531913/article/details/

    2024年02月12日
    浏览(38)
  • 【数据结构和算法】删除链表的中间节点

    Java基础合集 数据结构与算法合集 设计模式合集 多线程合集 分布式合集 ES合集 其他系列文章导航 文章目录 前言 一、题目描述 二、题解 三、代码 四、复杂度分析 这是力扣的 2095 题,难度为中等,解题方案有很多种,本文讲解我认为最奇妙的一种。 慢慢开始链表的模块了

    2024年01月19日
    浏览(63)
  • 【链表OJ】链表中倒数第k个结点 合并两个链表(含哨兵位) 分割链表 链表的回文结构

    前言: 💥🎈个人主页:​​​​​​Dream_Chaser~ 🎈💥 ✨✨刷题专栏:http://t.csdn.cn/UlvTc ⛳⛳本篇内容:力扣和牛客上链表OJ题目 目录  一、链表中倒数第k个结点 题目描述: 解题思路: 二.合并两个链表(含哨兵位)  题目描述: 解题思路:                                     

    2024年02月12日
    浏览(30)
  • 数据结构:链表基础OJ练习+带头双向循环链表的实现

    目录 一.leetcode剑指 Offer II 027. 回文链表 1.问题描述 2.问题分析与求解 (1) 快慢指针法定位链表的中间节点 (2) 将链表后半部分进行反转 附:递归法反转链表 (3) 双指针法判断链表是否回文 二.带头双向循环链表的实现 1.头文件 2.节点内存申请接口和链表初始化接口 3.链表的打

    2024年02月02日
    浏览(41)
  • 【力扣-876】链表的中间结点

    🖊作者 : Djx_hmbb 📘专栏 : 数据结构 😆今日分享 : ----------小Tips: 虽然都是口服液体制剂,且看起来单支容量都一样,但是“藿香正气水”与“藿香正气口服液”的区别你知道吗?藿香正气水里含有 40%-50% 的乙醇,而藿香正气口服液不含有乙醇。同时藿香正气水不能和头孢一

    2023年04月19日
    浏览(25)
  • 【LeetCode】876. 链表的中间结点

    leetcode链接 876. 链表的中间结点

    2024年01月19日
    浏览(56)
  • 【剑指offer|图解|链表】链表的中间结点 + 链表中倒数第k个结点

    🌈个人主页: 聆风吟 🔥系列专栏: 数据结构、算法模板 🔖少年有梦不应止于心动,更要付诸行动。      💬 hello! 小伙伴们大家好哇,今天作者给大家带来的是链表的相关面试题的讲解,在学习了下文之后,相信大家可以更好的理解链表,并且我们同过本文的练习相

    2024年02月05日
    浏览(37)
  • 【数据结构】——单链表的基本操作(带头结点)

            单链表解决了顺序表需要大量连续存储单元的缺点,但单链表附加指针域, 存储密度较顺序表低(考点!!) 。由于单链表的元素离散地分布在存储空间中,所以单链表是 非随机存取 的存储结构,即不能直接找到表中某个特定的结点。当查找某个特定结点时,需要

    2024年02月05日
    浏览(34)
  • 详解链表oJ<反转链表,链表的中间节点及链表的回文>

    hello,大家好,这里是Dark FlameMaster,今天和大家分享的是有关数据结构链表的几道题目,链表的中间节点,反转链表及判断链表是否为回文结构,放在一起讲解会印象更加深刻。 链接:链表的中间节点 分析:  如果想要得到链表的中间节点,最简单的思路就是从头结点遍历整

    2024年02月08日
    浏览(43)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包