LeetCode 876. Middle of the Linked List
题目描述
给定一个带有头结点 head 的非空单链表,返回链表的中间结点。
如果有两个中间结点,则返回第二个中间结点。
示例 1:
输入:
[1,2,3,4,5]
输出:此列表中的结点3(序列化形式:[3,4,5])
返回的结点值为3。 (测评系统对该结点序列化表述是 [3,4,5])。
注意,我们返回了一个ListNode类型的对象ans,这样:ans.val = 3,ans.next.val = 4,ans.next.next.val = 5, 以及ans.next.next.next = NULL.
示例 2:
输入:
[1,2,3,4,5,6]
输出:此列表中的结点4(序列化形式:[4,5,6])
由于该列表有两个中间结点,值分别为3和4,我们返回第二个结点。
提示:
- 给定链表的结点数介于
1和100之间。
思路
思路一
先求出链表的长度 length,再进行计数遍历,遍历到 length / 2 为止,返回该结点。
代码
1 | /** |
思路二
设置快慢指针 fast,slow。其中 fast 的步长为 $2$,slow 的步长为 $1$,那么在相同时间的前提下 fast 走过的链表长度就是 slow 走过长度的两倍。当 fast 抵达链表末尾时,slow 恰好指向链表的中间结点,此时 return slow。
代码
1 | /** |
赏
使用支付宝打赏
使用微信打赏
若你觉得我的文章对你有帮助,欢迎点击上方按钮对我打赏