1. 题目来源
链接:876. 链表的中间结点
题单:
-
- 链表、二叉树与一般树(前后指针/快慢指针/DFS/BFS/直径/LCA)
- §1.6 快慢指针
2. 题目解析
思路:
- 很基础的一道题,需要证明一下,当链表长度为奇数、偶数的情况下。快指针为 null 或者 快指针的 next 为 null 时,慢指针所能到达的位置,恰好就是题目要求的中间位置即可。这也是一个结论,记下就好。
- 时间复杂度: O ( n ) O(n) O(n)
- 空间复杂度: O ( 1 ) O(1) O(1)
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* ListNode *next;
* ListNode() : val(0), next(nullptr) {}
* ListNode(int x) : val(x), next(nullptr) {}
* ListNode(int x, ListNode *next) : val(x), next(next) {}
* };
*/
class Solution {
public:
ListNode* middleNode(ListNode* head) {
auto a = head, b = head;
while (b && b->next) {
a = a->next;
b = b->next->next;
}
return a;
}
};