876. 链表的中间结点

考点

  • 快慢指针/双指针

题解

1
2
3
4
5
6
7
8
9
10
11
12
class Solution {
public:
ListNode* middleNode(ListNode* head) {
ListNode *slow = head, *fast = head;
while (fast->next != nullptr) {
slow = slow->next;
fast = fast->next;
if (fast->next != nullptr) fast = fast->next;
}
return slow;
}
};

思路

同样使用快慢指针,但和以往不同,需要再往下走一格

可以和之前的代码作对比

1
2
3
4
5
6
7
8
ListNode* findMid(ListNode* head) {
ListNode *slow = head, *fast = head;
while (fast->next != nullptr && fast->next->next != nullptr) {
slow = slow->next;
fast = fast->next->next;
}
return slow;
}