链表的中间结点--快慢指针思想
0x01.问题
给定一个带有头结点
head
的非空单链表,返回链表的中间结点。
如果有两个中间结点,则返回第二个中间结点。
给定链表的结点数介于1
和100
之间。
C++结构体说明:
/*** Definition for singly-linked list.* struct ListNode {* int val;* ListNode *next;* ListNode(int x) : val(x), next(NULL) {}* };*/C++函数形式: ListNode* middleNode(ListNode* head)
0x02.简要分析
单链表问题,其实单链表经常出现的就这些问题,为什么?因为它欺负咱是单向的,从后到前没那么方便,所以故意整这些找位置的题。
凡事不要慌,先拿出手机发个朋友圈 ,自有解决的办法解决。
一般这类问题的解决方式大概分为三种:
- 数组存储每个结点。
- 多次遍历。
- 快慢指针。
数组存储会加大空间的消耗,多次遍历会加大时间的消耗,所以,最佳情况就是快慢指针法,这个方法可以说是单链表的灵魂,很多问题可以巧妙解决。
在这个问题中,只需要快指针每次走两步,慢指针每次走一步,就能巧妙解决。
0x03.解决代码–快慢指针
class Solution {public:ListNode* middleNode(ListNode* head) {ListNode* fast=head;ListNode* slow=head;while(fast!=NULL&&fast->next!=NULL){slow=slow->next;fast=fast->next->next;}return slow;}
};
ATFWUS --Writing By 2020–03–23
链表的中间结点--快慢指针思想相关推荐
- 数据结构-单链表进阶之快慢指针原理(快速查找法)
面试题:快速找到未知长度单链表的中间节点? 这个问题的解决方法分为普通方法和高级方法. 1.普通方法即我们大家都能一下子想到的,首先遍历一遍获取总长度L,然后再次遍历循环至L/2即可:时间复杂度为: ...
- leetcode 142. 环形链表 II(set/快慢指针)
给定一个链表,返回链表开始入环的第一个节点. 如果链表无环,则返回 null. 为了表示给定链表中的环,我们使用整数 pos 来表示链表尾连接到链表中的位置(索引从 0 开始). 如果 pos 是 - ...
- LeetCode 例题精讲 | 05 双指针×链表问题:快慢指针
点击关注上方"五分钟学算法", 设为"置顶或星标",第一时间送达干货. 转自面向大象编程 本期例题: LeetCode 876 - Middle of the ...
- 【LeetCode】【HOT】142. 环形链表 II(快慢指针)
[LeetCode][HOT]142. 环形链表 II 文章目录 [LeetCode][HOT]142. 环形链表 II package hot;class ListNode{int val;List ...
- 试编写一个将双向循环链表逆置的算法_图解:链表的快慢指针,解决 80% 的链表面试题!...
一.前言 链表是基本的数据结构之一,它与数组不同,数组在内存中存储,需要一块连续的内容空间来存储,对内存的要求比较高.例如我们需要 100MB 大小的数组,内存中就必须有一段连续的 100MB 的内存 ...
- day07 Java链表(环、快慢指针)
转载注明!!https://blog.csdn.net/qq_31842777/article/details/90632307 涉及以下问题: 查找倒数第k个结点: 查找中间结点: 判断链表是否有环 ...
- 【LeetCode笔记】148. 排序链表(Java、归并排序、快慢指针、双重递归)
文章目录 题目描述 思路 & 代码 二刷 题目描述 难点在于时空复杂度的要求 思路 & 代码 转化成:归并排序 + 合并两个有序链表 即可 利用快慢指针来拆分成两条链表 注意:链表的拆 ...
- 环形链表[快慢指针 入环点]
环&快慢指针 前言 一.环形链表 二.快慢指针 1.相遇即有环 2.入环点 总结 参考文献 前言 对于环问题,快慢指针是一种常用的手段.一步两步走,通过判定是否相遇来判定是否存在环.而且快慢指 ...
- [剑指offer][JAVA]面试题第[22]题[j剑指offer][双指针][快慢指针]
[问题描述][中等] 输入一个链表,输出该链表中倒数第k个节点.为了符合大多数人的习惯,本题从1开始计数,即链表的尾节点是倒数第1个节点.例如,一个链表有6个节点,从头节点开始,它们的值依次是1.2. ...
- 快慢指针(Java版)
判断链表是否有环并返回入环起始位置 题目链接 **思路:**首先使用快慢指针判断链表是否有环,如果存在环,即fast==slow.以当前慢指针作为起点再走一圈,当下次相遇时,返回slow.如果链表不存 ...
最新文章
- 初心大陆-----python宝典之以外学习对比去重
- 深度比较Paxos和Raft
- 看了豆瓣的差评以后,我不建议你买我的书了。
- 数据结构(复习)--------关于平衡二叉树(转载)
- docker oracle 11g
- Numpy 之 where理解
- (25)FPGA工程师与其他工程师交集(FPGA不积跬步101)
- java jdbc jar包_通过 Spring 框架如何进行JDBC操作呢?
- 计算机负数次幂科学表示,负数的科学计数法怎么表示
- Program Library HOWTO(1)
- 软件测试简历常见问题
- poco linux,centos7.2 安装poco
- Java课程设计——计算平面图形面积周长、立体图形体积
- 【原创干货】6000字、22个案例详解Pandas数据分析/预处理时的实用技巧,超简单...
- 海康服务器装ISO系统,iso镜像,手把手教你iso系统镜像文件怎么安装
- 最近用了一个免费的服务器
- PQ(product quantization) 算法---(一)
- 当动作捕捉应用到教学教研工作领域
- 【HDU 杭电 5671 Matrix】
- Android 音乐播放器模块心得卡顿优化
热门文章
- Ext Gwt 实用例子--类似meebo的聊天界面
- 在浏览器中聊天(msn.jabber or gtalk,yahoo,aol,icq,meebo)
- 下载jupyterlab中的文件夹
- python 制作工资条
- 计算机工资表怎么打,Word怎么制作工资条 Word制作工资条教程-电脑教程
- [线段树][数学] Jzoj P4237 Melancholy
- kotlin之开发经验整理
- android 发短信 oppo,OPPO R11短信发送失败怎么办?OPPO手机短信发送失败的解决方法...
- 漫画:如何用脚本抢月饼?
- 电脑运行卡或软件卡死无响应,怎么办?