0x01.问题

给定一个带有头结点 head 的非空单链表,返回链表的中间结点。
如果有两个中间结点,则返回第二个中间结点。
给定链表的结点数介于 1100 之间。

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. 数据结构-单链表进阶之快慢指针原理(快速查找法)

    面试题:快速找到未知长度单链表的中间节点? 这个问题的解决方法分为普通方法和高级方法. 1.普通方法即我们大家都能一下子想到的,首先遍历一遍获取总长度L,然后再次遍历循环至L/2即可:时间复杂度为: ...

  2. leetcode 142. 环形链表 II(set/快慢指针)

    给定一个链表,返回链表开始入环的第一个节点. 如果链表无环,则返回 null. 为了表示给定链表中的环,我们使用整数 pos 来表示链表尾连接到链表中的位置(索引从 0 开始). 如果 pos 是 - ...

  3. LeetCode 例题精讲 | 05 双指针×链表问题:快慢指针

    点击关注上方"五分钟学算法", 设为"置顶或星标",第一时间送达干货. 转自面向大象编程 本期例题: LeetCode 876 - Middle of the ...

  4. 【LeetCode】【HOT】142. 环形链表 II(快慢指针)

    [LeetCode][HOT]142. 环形链表 II 文章目录 [LeetCode][HOT]142. 环形链表 II package hot;class ListNode{int val;List ...

  5. 试编写一个将双向循环链表逆置的算法_图解:链表的快慢指针,解决 80% 的链表面试题!...

    一.前言 链表是基本的数据结构之一,它与数组不同,数组在内存中存储,需要一块连续的内容空间来存储,对内存的要求比较高.例如我们需要 100MB 大小的数组,内存中就必须有一段连续的 100MB 的内存 ...

  6. day07 Java链表(环、快慢指针)

    转载注明!!https://blog.csdn.net/qq_31842777/article/details/90632307 涉及以下问题: 查找倒数第k个结点: 查找中间结点: 判断链表是否有环 ...

  7. 【LeetCode笔记】148. 排序链表(Java、归并排序、快慢指针、双重递归)

    文章目录 题目描述 思路 & 代码 二刷 题目描述 难点在于时空复杂度的要求 思路 & 代码 转化成:归并排序 + 合并两个有序链表 即可 利用快慢指针来拆分成两条链表 注意:链表的拆 ...

  8. 环形链表[快慢指针 入环点]

    环&快慢指针 前言 一.环形链表 二.快慢指针 1.相遇即有环 2.入环点 总结 参考文献 前言 对于环问题,快慢指针是一种常用的手段.一步两步走,通过判定是否相遇来判定是否存在环.而且快慢指 ...

  9. [剑指offer][JAVA]面试题第[22]题[j剑指offer][双指针][快慢指针]

    [问题描述][中等] 输入一个链表,输出该链表中倒数第k个节点.为了符合大多数人的习惯,本题从1开始计数,即链表的尾节点是倒数第1个节点.例如,一个链表有6个节点,从头节点开始,它们的值依次是1.2. ...

  10. 快慢指针(Java版)

    判断链表是否有环并返回入环起始位置 题目链接 **思路:**首先使用快慢指针判断链表是否有环,如果存在环,即fast==slow.以当前慢指针作为起点再走一圈,当下次相遇时,返回slow.如果链表不存 ...

最新文章

  1. 初心大陆-----python宝典之以外学习对比去重
  2. 深度比较Paxos和Raft
  3. 看了豆瓣的差评以后,我不建议你买我的书了。
  4. 数据结构(复习)--------关于平衡二叉树(转载)
  5. docker oracle 11g
  6. Numpy 之 where理解
  7. (25)FPGA工程师与其他工程师交集(FPGA不积跬步101)
  8. java jdbc jar包_通过 Spring 框架如何进行JDBC操作呢?
  9. 计算机负数次幂科学表示,负数的科学计数法怎么表示
  10. Program Library HOWTO(1)
  11. 软件测试简历常见问题
  12. poco linux,centos7.2 安装poco
  13. Java课程设计——计算平面图形面积周长、立体图形体积
  14. 【原创干货】6000字、22个案例详解Pandas数据分析/预处理时的实用技巧,超简单...
  15. 海康服务器装ISO系统,iso镜像,手把手教你iso系统镜像文件怎么安装
  16. 最近用了一个免费的服务器
  17. PQ(product quantization) 算法---(一)
  18. 当动作捕捉应用到教学教研工作领域
  19. 【HDU 杭电 5671 Matrix】
  20. Android 音乐播放器模块心得卡顿优化

热门文章

  1. Ext Gwt 实用例子--类似meebo的聊天界面
  2. 在浏览器中聊天(msn.jabber or gtalk,yahoo,aol,icq,meebo)
  3. 下载jupyterlab中的文件夹
  4. python 制作工资条
  5. 计算机工资表怎么打,Word怎么制作工资条 Word制作工资条教程-电脑教程
  6. [线段树][数学] Jzoj P4237 Melancholy
  7. kotlin之开发经验整理
  8. android 发短信 oppo,OPPO R11短信发送失败怎么办?OPPO手机短信发送失败的解决方法...
  9. 漫画:如何用脚本抢月饼?
  10. 电脑运行卡或软件卡死无响应,怎么办?