题目:链表的中间结点
给定一个带有头结点 head 的非空单链表,返回链表的中间结点。如果有两个中间结点,则返回第二个中间结点复制代码
示例:
输入:[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.输入:[1,2,3,4,5,6]输出:此列表中的结点 4 (序列化形式:[4,5,6])由于该列表有两个中间结点,值分别为 3 和 4,我们返回第二个结点。复制代码
思考:
这道题可以通过快慢指针法来解决。定义两个指针,快指针是慢指针速度的两倍。当快指针走到链表末尾时,慢指针正好到达链表的中间节点。复制代码
实现:
class Solution { public int fib(int N) { if (N == 0) { return 0; } if (N == 1) { return 1; } return fib(N - 1) + fib(N - 2); }}复制代码