【データ構造OJ問題】連結リストの中間ノード

元のタイトルのリンク: https://leetcode.cn/problems/middle-of-the-linked-list/description/

目次

1. トピックの説明

2.思考分析

3. コードの実装


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;
}

おすすめ

転載: blog.csdn.net/m0_62531913/article/details/132309395