当前位置: 首页 > 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;
}

http://www.xdnf.cn/news/307621.html

相关文章:

  • 人工智能端侧热度再起
  • 406错误,WARN 33820 --- [generator] [nio-8080-exec-4] .w.s.m.s.DefaultHa
  • ActiveMQ 安全机制与企业级实践(二)
  • 在线时间戳转换工具
  • 设计模式-工厂模式
  • langchain使用推理模型如DeepSeek,删除回答中的推理过程<think></think>
  • 【安全】端口保护技术--端口敲门和单包授权
  • GaussDB数据库事务管理:高可靠与高性能的实践之道
  • 【C/C++】构造函数与析构函数
  • 某公园楼栋自由曲面薄壳结构自动化监测
  • 图形化编程重塑 IoT 边缘开发:技术革新与生态竞合新范式
  • 高等数学第五章---定积分(§5.3定积分的计算方法)
  • 柯西不等式应用题
  • K8S - ConfigMap 与 Secret - 应用配置与敏感信息管理
  • R8周:RNN实现阿尔茨海默病诊断
  • jmeter 执行顺序和组件作用域
  • Blender插件机制设计与Python实现
  • Qt学习Day0:Qt简介
  • [人机交互]协作与通信的设计
  • 数据管理平台是什么?企业应如何做好数据化管理?
  • 巧记英语四级单词 Unit7-下【晓艳老师版】
  • [java八股文][Java并发编程面试篇]并发安全
  • Android Service 从 1.0 到 16 的演进史
  • SQL报错注入成功特征
  • 人工智能100问☞第15问:人工智能的常见分类方式有哪些?
  • Unity Editor 扩展:查找缺失的 Image Sprite
  • 从入门到登峰-嵌入式Tracker定位算法全景之旅 Part 7 |TinyML 定位:深度模型在 MCU 上的部署
  • HarmonyOS开发:粒子动画使用详解
  • idea更换jdk版本操作
  • 分布式、高并发-Day03