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

链表的面试题3找出中间节点

来来来,接着继续我们的第三道题 。

解法

暴力求解

快慢指针


 https://leetcode.cn/problems/middle-of-the-linked-list/submissions/

这道题的话,思路是非常明确的,就是让你找出我们这个所谓的中间节点并且输出。

那这道题我们就需要注意一些细节上的问题,或者说是对于整个链表结构的访问的理解要到位。

如果这道题放在顺序表上,那我们很容易就能根据下标来判断是否为中间节点。但是,问题就出在,链表是不能依据数组下标来访问的,那这道题我们很简单的思路就是,先得出链表长度,再定义变量值来求中间节点。那我把代码贴在下面。

暴力求解

typedef struct ListNode ListNode;
struct ListNode* middleNode(struct ListNode* head){ListNode* pcur = head;int count = 0;int ret=0;// 求链表的长度countwhile (pcur) {count++;pcur = pcur->next;}pcur=head;//重置pcur为头节点while(pcur&&ret<(count/2)){ret++;pcur=pcur->next;}return pcur;
}

快慢指针

那这道题应该放在第一道题的,因为这是非常好的一道题能看出我们的双指针法到底有多便捷。我们根据前两道题目也知道,双指针又叫快慢指针法,注定有一个指针走的快,有一个走得慢,我们根据走的快的指针和慢指针的差值的逻辑关系,来确定此时慢指针到底处于什么位置。

下面给大家放一张图表示一下快慢指针

从图中我们就能很容易的看到fast永远比slow快一步。这样做的好处是什么?我们在刚刚的暴力求解的时候,是不是要注意一个细节,那就是,我们的简单粗暴的代码,并不能同时涵盖奇数和偶数,需要分类讨论。而快慢指针就没有这样的麻烦,可以极大的缩短我们的时间复杂度,提高效率。

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

相关文章:

  • git “分离头指针”(detached HEAD) 状态。
  • 【上位机——MFC】绘图
  • Servlet--快速入门及HTTP概述
  • DXFViewer进行中2 -> 直线 解析+渲染 ✅已完成
  • uniapp开发09-设置一个tabbar底部导航栏且配置icon图标
  • react-13react中外部css引入以及style内联样式(动态className与动态style)
  • 貌似我的ollama加载的模型被下载了两份?终于搞懂原理了。
  • 「Mac畅玩AIGC与多模态22」开发篇18 - 多段输出拼接与格式化展现工作流示例
  • ASP.NET Core 中间件
  • 微调大模型如何准备数据集——常用数据集,Alpaca和ShareGPT
  • PyTorch 与 TensorFlow 中基于自定义层的 DNN 实现对比
  • 基于Piecewise Jerk Speed Optimizer的速度规划算法(附ROS C++/Python仿真)
  • 免费视频压缩软件
  • 应用服务器Tomcat
  • 【优选算法 | 模拟】探索模拟算法: 编程与问题分析的双重 考验
  • SVG数据可视化设计(AI)完全工作流解读|计育韬
  • 如何使用 QuickAPI 推动汽车行业数据分享:数据仓库场景下的实践
  • 【开源深度解析】从零打造AI暗棋对战系统:Python实现中国象棋暗棋全攻略
  • 算法思想之深度优先搜索(DFS)、递归以及案例(最多能得到多少克黄金、精准核酸检测、最富裕的小家庭)
  • Nginx 安全防护与 HTTPS 安全部署
  • 商务部新闻发言人就中美经贸高层会谈答记者问
  • 上海国际电影节特设“走进大卫·林奇的梦境”单元
  • “高校领域突出问题系统整治”已启动,聚焦招生、基建、师德等重点
  • 印巴局势紧张之际,巴基斯坦两天内第二次进行导弹试射
  • 媒体:南京秦淮区卫健委回应一医院涉嫌违规提供试管婴儿服务
  • 李公明 | 一周画记:生活就是抵抗