【データ構造OJの質問】リングリンクリスト

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

目次

1. トピックの説明

2.思考分析

3. コードの実装


1. トピックの説明

2.思考分析

全体的な考え方:高速ポインタと低速ポインタを定義するfast と throw .リンクされたリストにリングがある場合高速ポインタはリング内の低速ポインタに追いつきます。

つまり、低速ポインタは一度に 1 ステップずつ移動し、高速ポインタは一度に 2 ステップずつ移動します。2 つのポインタは、リンク リストの開始位置から実行を開始します。リンク リストにリングがある場合、それらは確実に実行されます。そうでない場合、高速ポインタは最初にリンクされたリストの最後に移動します。

この問題を単純化して、前にリング部分がないリンク リストを線分で表し、リング部分があるリンク リストを円で表すことにします。

3. コードの実装

/**
 * Definition for singly-linked list.
 * struct ListNode {
 *     int val;
 *     struct ListNode *next;
 * };
 */
bool hasCycle(struct ListNode *head) {
    struct ListNode *fast=head,*slow=head;
    while(fast&&fast->next)
    {
        fast=fast->next->next;
        slow=slow->next;
        if(slow==fast)
            return true;
    }
    return false;
}

おすすめ

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