当前位置: 首页 > news >正文

衡水网站建设地方网页界面设计案例分析

衡水网站建设地方,网页界面设计案例分析,seo1短视频网页入口营销,大连做网站公司排行榜一、引言:从龟兔赛跑说起 大家小时候都听过龟兔赛跑的故事吧? 兔子跑得快,但中途偷懒睡觉; 乌龟跑得慢,但坚持不懈,最终赢得了比赛。 在算法的世界里,我们也有这样一对 "龟兔组合"…

一、引言:从龟兔赛跑说起

大家小时候都听过龟兔赛跑的故事吧?

兔子跑得快,但中途偷懒睡觉;

乌龟跑得慢,但坚持不懈,最终赢得了比赛。

在算法的世界里,我们也有这样一对 "龟兔组合"—— 快慢指针

二、问题描述:寻找链表的中间节点

给定一个头结点为 head 的非空单链表,返回链表的中间结点。

如果有两个中间结点,则返回第二个中间结点。

示例:
输入:[1,2,3,4,5]
输出:此列表中的结点 3 (序列化形式:[3,4,5])
返回的结点值为 3 。

三、快慢指针:链表中的 "龟兔赛跑"

1. 基本思想

快慢指针其实就是两个指针,一个走得快,一个走得慢。

在链表中,我们通常让慢指针一次移动一步,而快指针一次移动两步,

就像乌龟和兔子在链表上赛跑一样。

2. 为什么这样能找到中间节点呢?

想象一下,你和一个朋友在操场上跑步,操场是个环形跑道。

如果你朋友的速度是你的两倍,当你跑完半圈的时候,你朋友已经跑完一圈回到起点了;

当你跑完一圈的时候,你朋友已经跑完两圈了。

链表虽然不是环形的,但道理是一样的。

当快指针到达链表末尾时,慢指针刚好到达链表的中间位置。这就是快慢指针的核心思想。

四、代码实现与解析

下面是使用快慢指针解决链表中间节点问题的代码:

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

代码详细解析:

指针初始化

        slow = fast = head;:让慢指针和快指针都从链表的头节点开始。

循环条件

        while(fast && fast->next):这个条件确保快指针不会越界。

                        因为快指针一次要移动两步,所以我们需要确保当前节点和下一个节点都不为空。

指针移动

        slow = slow->next;:慢指针每次移动一步。

        fast = fast->next->next;:快指针每次移动两步。

返回结果

                                当循环结束时,慢指针就指向了链表的中间节点。

五、用 "图" 说话:遍历过程详解

为了更直观地理解快慢指针的工作过程,我们来画个图看看。假设我们有一个链表 [1,2,3,4,5],它的结构如下:

1 -> 2 -> 3 -> 4 -> 5

现在,让我们看看快慢指针是如何遍历这个链表的:

初始状态:

slow
↓
1 -> 2 -> 3 -> 4 -> 5
↑
fast

第一次循环后:

慢指针移动一步到 2,快指针移动两步到 3:

    slow↓
1 -> 2 -> 3 -> 4 -> 5↑fast

第二次循环后:

慢指针移动一步到 3,快指针移动两步到 5:

        slow↓
1 -> 2 -> 3 -> 4 -> 5↑fast

第三次循环:

此时快指针发现自己的下一个节点是空(5 的 next 为空),循环终止。慢指针正好指向中间节点 3。

        slow↓
1 -> 2 -> 3 -> 4 -> 5↑fast (循环终止)

如果链表的长度是偶数,比如 [1,2,3,4],那么中间节点是 3(第二个中间节点)。让我们看看这种情况下快慢指针的表现:

初始:
slow
↓
1 -> 2 -> 3 -> 4
↑
fast第一次循环后:slow↓
1 -> 2 -> 3 -> 4↑fast第二次循环后:slow↓
1 -> 2 -> 3 -> 4↑fast (fast->next为空,循环终止)

可以看到,当链表长度为偶数时,慢指针会指向第二个中间节点,符合题目要求。

六、知识点总结:快慢指针的应用场景

快慢指针是一种非常高效的算法技巧,除了寻找链表中间节点外,它还有很多其他的应用场景:

检测链表中是否有环:如果链表中有环,快指针最终会追上慢指针。

寻找链表倒数第 k 个节点:让快指针先走 k 步,然后快慢指针同时移动,当快指针到达末尾时,慢指针就指向倒数第 k 个节点。

链表的反转与合并:在处理链表的反转或合并问题时,快慢指针可以帮助我们找到合适的分割点。

判断链表是否为回文:先找到链表的中间节点,然后反转后半部分链表,最后比较前半部分和后半部分是否相同。

七、总结与启示

快慢指针算法的核心思想就是利用不同速度的指针在链表上移动,从而实现对链表的高效遍历和操作。这种算法不仅代码简洁,而且时间复杂度通常为 O (n),空间复杂度为 O (1),非常适合处理大规模数据。

http://www.dtcms.com/a/516456.html

相关文章:

  • Process Monitor 学习笔记(5.24):工具栏参考与高效快捷键指南
  • UE5 材质-15:车漆-不透明-透明图层,FBX格式的介绍,如何导入外部模型FBX汽车,下载与使用官方的汽车材质 automotive materials,
  • qt实用学习案例:数据库设计+图表显示+model-view模式+样式表定制
  • 脉冲神经网络最新文献合集-XX
  • wordpress做学校网站thinkphp 网站源码
  • 数据库(6)
  • 【性能优化】--perfetto分析思路
  • **发散创新:探索生物神经网络与编程语言的交融**随着生物神经网络研
  • 平台网站开发公司广州安全教育平台登陆
  • 第1章:初识Linux系统——第8节:查看/修改权限控制和ACL
  • Rust所有权机制在Web服务开发中的避坑指南
  • 成都网站开发费用企业网站建设任务书
  • pyhton 螺旋矩阵(指针-矩阵-中等)含源码(二十六)
  • 矩阵的奇异值分解(SVD)在三维图形学中的进阶应用
  • 装饰器加强
  • 17Z一起做网站广州站南阳商都网站做网站
  • MySQL多实例部署实战指南
  • 微网站建设招聘做招聘网站代理商需要多少钱
  • Android 网络变动监听
  • Deep Metric Learning(深度度量学习)
  • 消息队列RabbitMQ、Kafka、ActiveMQ 、Redis、 ZeroMQ、Apache Pulsar对比和如何使用
  • 建网站专用网站标准物质网站建设模板
  • (四)Flutter插件之IOS插件开发
  • 湘潭网站建设 x磐石网络广州网站建设培训学校
  • 织梦做的网站老是被黑国外做美食视频网站有哪些
  • 自动化测试相关使用
  • 做移门图的 网站有哪些做招聘网站需要做什么公司
  • TDengine 数字函数 RADIANS 用户手册
  • 做导航网站赚钱企业网站搜索优化外
  • 网站网页设计公司海南省建设执业中心网站