元のタイトルのリンク: https://leetcode.cn/problems/middle-of-the-linked-list/description/
目次
1. トピックの説明
2.思考分析
高速ポインタ方式と低速ポインタ方式
高速ポインタと低速ポインタを使用して中間ノードを見つけます。高速ポインタは毎回 2 ステップ実行し、低速ポインタは一度に 1 ステップ実行します。高速ポインタが終端に到達すると、低速ポインタは中間位置に移動します。
ここでは、遅いポインタを表すためにslowを使用し、速いポインタを表すためにfastを使用します。最初は、slow と fast の両方がヘッド ノード head を指すようにします。
単一リンクリストのノード数が奇数の場合、fast->next=NULLの場合、slow は中間ノードを指します。
単一リンクリストのノード数が偶数の場合、fast==NULLの場合、slow は中間ノードを指します。
3. コードの実装
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* struct ListNode *next;
* };
*/
struct ListNode* middleNode(struct ListNode* head){
struct ListNode *slow=head,*fast=head;
while(fast&&fast->next)
{
slow=slow->next;
fast=fast->next->next;
}
return slow;
}