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 | /** |
赏
使用支付宝打赏
使用微信打赏
若你觉得我的文章对你有帮助,欢迎点击上方按钮对我打赏