快慢指针是一种用于在链表中查找中间结点的技巧。具体来说,您可以定义两个指针,一个指针每次移动一个结点,另一个指针每次移动两个结点。因为快指针每次移动的结点数量是慢指针移动结点数量的两倍,所以当快指针到达链表的末尾时,慢指针正好在链表的中间。下面是一个简单的示例:
- 定义两个指针
slow
和fast
,初始都指向链表的头结点head
。 - 每次移动
slow
指针一个结点,移动fast
指针两个结点。 - 当
fast
指针指向链表末尾或null
时,停止循环。 - 在循环结束时,
slow
指针指向链表的中间结点。
Node *slow = head;
Node *fast = head;
while (fast != null && fast->next != null) {
slow = slow->next;
fast = fast->next->next;
}
// At this point, slow is at the middle of the linked list.
如果链表包含偶数个结点,则慢指针将指向中间两个结点的第一个结点。如果链表包含奇数个结点,则慢指针将指向中间结点。