| |
|
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
| -> 数据结构与算法 -> 【漫步计算机系统】之数据结构与算法(6):有趣的链表问题 -> 正文阅读 |
|
|
[数据结构与算法]【漫步计算机系统】之数据结构与算法(6):有趣的链表问题 |
|
有两个有意思的关于链表的问题,大家可以先思考一下,再看我的讲解,一定会觉得妙趣横生。 问题一:找到链表中环的入口结点
大家看到,这个链表的入口结点就是:y1。那么怎么找到这个y1呢?我先通俗地阐述,再给出C语言源代码。
图1 在图1中,设置两个指针,slow和fast,slow指针每次前进一步,fast指针每次前进两步。
当slow和fast指针进入环中,经过有限次迭代,它们必然在z1点相遇。 这时让slow重新指向头结点x1,然后slow和fast指针每次前进一个结点,则它们必然在y1相遇。返回指向y1的slow指针即可。
代码如下:
问题二:两个链表的第一个公共结点
显然,这两个链表的第一个公共结点就是c1。 算法描述:先让l1指针指向a1结点,l2指针指向b1结点。l1和l2每次前进一步,l1先到达c3,l1返回到指向b1。接下来,l2到达c3,返回到指向a1。此时,l1指向b2结点,两个指针同步前进,同时到达c1,程序返回c1,算法结束。 代码如下:
欢迎留言区讨论。
注:凡属于本公众号内容,未经允许不得私自转载,否则将依法追究侵权责任。 |
|
|
|
|
| 上一篇文章 下一篇文章 查看所有文章 |
|
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
| 360图书馆 购物 三丰科技 阅读网 日历 万年历 2025年11日历 | -2025/11/22 9:10:43- |
|
| 网站联系: qq:121756557 email:121756557@qq.com IT数码 |