链表中间结点

leetcode题目链接:876. 链表的中间结点

一、朴素解法

最直观的思路,因为不知道这个链表的长度,就先通过一次循环统计链表的长度len
之后第二次遍历,直到找到中间结点,输出

/*** Definition for singly-linked list.* struct ListNode {*     int val;*     struct ListNode *next;* };*/struct ListNode* middleNode(struct ListNode* head){struct ListNode *p = head;int len = 0, t = 0;// 统计链表长度lenwhile(p){len++;p = p->next;}p = head;while(1){if((t==((len-1)/2))&&(len%2!=0)){return p;}if((t==(len/2))&&(len%2==0)){return p;}p = p->next;t++;}
}

结果:

二、快慢指针

通过分析发现,第一次遍历几乎没做什么事,就是统计了一下链表的长度,当链表长度很长时,就会浪费大量的时间。
采用快慢指针,快指针一次走两步,慢指针一次走一步,这样当快指针走到链表结尾时,慢指针正好指向中间节点。

1. len = 2n

Eg. len = 4

第一步(初始状态)

快慢指针都指向第一个节点(头节点)

第二步

快指针前进两步,慢指针前进一步

第三步

快指针到达链表末尾,此时慢指针正好指向题目要求的偶数个数的第二个中间节点,结束循环,
结束条件: fast == NULL

2. len = 2n+1

Eg. len = 5

第一步 (初始状态)

第二步

快指针前进两步,慢指针前进一步

第三步

虽然此时快指针没有到达链表结尾,但是此时慢指针已经到达了链表中间,此时应该标记为结束标志结束循环,否则快指针去找NULL的next就会出错
判断条件: fast->next == NULL

因此可以得到两种情况下的结束条件是 fast && fast->next

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

leetcode 876.链表中间结点相关推荐

  1. LeetCode 876——链表的中间结点

    1. 题目 给定一个带有头结点 head 的非空单链表,返回链表的中间结点. 如果有两个中间结点,则返回第二个中间结点. 示例 1: 输入:[1,2,3,4,5] 输出:此列表中的结点 3 (序列化形 ...

  2. Leetcode 876. 链表的中间结点 (每日一题 20210918)

    给定一个头结点为 head 的非空单链表,返回链表的中间结点.如果有两个中间结点,则返回第二个中间结点.示例 1:输入:[1,2,3,4,5] 输出:此列表中的结点 3 (序列化形式:[3,4,5]) ...

  3. LeetCode 876. 链表的中间结点(快慢指针)

    1. 题目 给定一个带有头结点 head 的非空单链表,返回链表的中间结点. 如果有两个中间结点,则返回第二个中间结点. 2. 解题 快慢指针法 class Solution {public:List ...

  4. leetcode 876. 链表的中间结点 做题笔记

    题目: 给定一个头结点为 head 的非空单链表,返回链表的中间结点. 如果有两个中间结点,则返回第二个中间结点. 示例 1: 输入:[1,2,3,4,5] 输出:此列表中的结点 3 (序列化形式:[ ...

  5. LeetCode 876. 链表的中间结点

    原题链接 解题思路:快慢指针,快指针走两步,慢指针走一步.快指针到NULL慢指针自然到中间位置 /*** Definition for singly-linked list.* struct List ...

  6. 每日一道leetcode(python)876. 链表的中间结点

    每日一道leetcode(python)876. 链表的中间结点 2021-08-19 给定一个头结点为 head 的非空单链表,返回链表的中间结点.如果有两个中间结点,则返回第二个中间结点.示例 1 ...

  7. JavaScript——leetcode算法入门876. 链表的中间结点【双指针专题】

    题目描述 给定一个头结点为 head 的非空单链表,返回链表的中间结点. 如果有两个中间结点,则返回第二个中间结点. 示例 1: 输入:[1,2,3,4,5] 输出:此列表中的结点 3 (序列化形式: ...

  8. 【LeetCode题目详解】(二)206.反转链表、876.链表的中间结点

    目录 一.力扣第206题:反转链表 1.思路一 2.思路二 二.力扣第876题:链表的中间结点 1.思路一 2.思路二 总结 一.力扣第206题:反转链表 题目链接:206. 反转链表 - 力扣(Le ...

  9. LeetCode Algorithm 876. 链表的中间结点

    876. 链表的中间结点 Ideas 这题直接秒杀吧,快慢指针,快指针一次走两步,慢指针一次走一步,快指针到头之后慢指针正好到链表中间. Code C++ class Solution {public ...

最新文章

  1. Ubuntu 16.04中安装VMware Tools
  2. MRTG—网络监控工具
  3. linux作业控制三个,10个linux 作业控制的bash 脚本实例
  4. php 中国标准时间,linux 系统时间与硬件时间与中国标准时间
  5. Win32 SDK 编写截图小工具
  6. NGUI减少Drawcall
  7. 先查询后修改并发的时候sql_如何解决并发场景下扣款的数据一致性问题?
  8. SLAM GMapping(4)SLAM处理器
  9. DBA想要拓展技能,拿下高薪Offer,这些原创公众号你关注了吗?
  10. python udp 丢包_Python语言---TCP、UDP
  11. 计算机excel无法打开,电脑excel打不开的解决方法
  12. Python 大小写转换
  13. 微信扫描普通二维码进入小程序
  14. ios App加载网页,点击网页链接调用App处理
  15. 解决Invalid HTTP_HOST header: 'xxx.xx.xxx.xxx:8000'. You may need to add 'xxx.xx' to ALLOWED_HOSTS问题
  16. windows下批处理文件bat怎么写?
  17. 支持向量机(SVM)——线性支持向量机
  18. VMware Workstation 在此主机上不支持嵌套虚拟化。模块“HV”启动失败。未能启动虚拟机。
  19. Typo3及Nette漏洞合集
  20. 如何快速从国外官网下载软件

热门文章

  1. 我是如何在 16 岁时成为全栈开发者的?
  2. decode函数的用法(decode函数的用法python二进制)
  3. Linux环境变量和命令行参数
  4. 故障处理 软件 需求_YamahaYamaha机器人RCX340控制器报警故障维护【AVG机器人系统】_智能云仓储库存wms管理分配货_电子标签价签拣货系统_工控erp上位机软件开发设计...
  5. DTU应用场景,你了解多少?
  6. 【山外K60 KL26】jlink 下载失败的最详细解决办法
  7. php 元字符与转义,正则表达式中普通转义字符和元字符
  8. velocity模板引擎-vm语法整理
  9. Mediawiki环境搭建
  10. 西电计算机学院有保研清华的吗,北邮西电保送清华人数进前10,不输双一流,哪些大学学生能读清华...