单链表经典OJ题:找出链表的中间节点

编程入门 行业动态 更新时间:2024-10-25 07:26:20

单<a href=https://www.elefans.com/category/jswz/34/1769662.html style=链表经典OJ题:找出链表的中间节点"/>

单链表经典OJ题:找出链表的中间节点

 

题目:

  1. 给你单链表的头结点 head ,请你找出并返回链表的中间结点。
  2. 如果有两个中间结点,则返回第二个中间结点。

图例:

 

解法:

解法1:

  • 先遍历链表确定链表节点的数量,然后再找到中间位置的节点

解法2:

  • 快慢指针

快慢指针:

定义两个指针,一个快一个慢,二者一开始都指向头节点,但是在遍历链表的时候二者情况不同。 

  • 慢指针每次只走一步
  • 快指针每次走两步

图例: 

 

 

如图所示,当快指针走到最后一个节点位置的时候,慢指针刚好在中间节点的位置。

当然,链表的节点个数也分为偶数和奇数,当为偶数节点时,快指针fast要抵达NULL位置,才能找到指定位置。

因此判断条件可以分为两种:

  •  节点个数是偶数:快指针当前是否为空。
  • 节点个数是奇数:快指针所在的节点,节点内部的指向是否为空。

代码演示:

 

fast =  fast - > next   ->next   表示快指针走两步,走向下一个节点的下一个节点。

注意事项:

  • 这里不能修改顺序,不能变成while(fast->next && fast) 

这样是错误的,因为在偶数节点的时候,当快指针在空的位置上时,下一个节点的指向是不存在的,,但是因为判断条件的先后顺序,要先判断快指针下一个节点是否为空,但因为这个不存在,所以导致错误 。


更多推荐

单链表经典OJ题:找出链表的中间节点

本文发布于:2023-12-08 03:47:49,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1672266.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:链表   节点   经典   OJ

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!