[Linked List ABl. Frage 7] Ring Linked List

Inhaltsverzeichnis

Quelle des Themas:

Code:

Ideenanalyse:

Umsetzungsprozess:


Quelle des Themas:

Lituo 141. Ring-verknüpfte Liste

Themenbeschreibung

Code:

bool hasCycle(struct ListNode* head) {
    struct ListNode* fast = head, * slow = head;

    while (fast && fast->next)
    {
        fast = fast->next->next;
        slow = slow->next;

        if (fast == slow)
            return true;
    }
    return false;
}

Ideenanalyse:

Diese Frage dient dazu, festzustellen, ob die verknüpfte Liste ein Ring ist. Dann definieren wir zwei Zeiger, einen schnellen und einen langsamen. Der schnelle Zeiger bewegt sich jeweils um zwei Schritte und der langsame Zeiger bewegt sich jeweils um einen Schritt. Wenn die verknüpfte Liste in einer Schleife ausgeführt wird, kann der schnelle Zeiger den langsamen Zeiger auf jeden Fall einholen und bildet nach der Überlappung eine Schleife. Wenn die verknüpfte Liste nicht in einer Schleife ausgeführt wird, wird unser schneller Zeiger leer.

Umsetzungsprozess:

1. Verwenden Sie schnelle und langsame Zeiger und initialisieren Sie sie so, dass sie auf den Kopf der ursprünglichen verknüpften Liste zeigen. Der langsame Zeiger führt jeweils einen Schritt aus, und der schnelle Zeiger führt jeweils zwei Schritte aus.

2. Beim Schleifen fügen wir eine Beurteilungsanweisung hinzu. Wenn schnell == langsam, bedeutet dies, dass die verknüpfte Liste in einer Schleife ausgeführt wird.

3. Wenn der schnelle Zeiger leer wird oder der nächste schnelle Zeiger leer ist, bedeutet dies, dass die verknüpfte Liste nicht in einer Schleife ausgeführt wird.

*** Ende des Artikels ***

Supongo que te gusta

Origin blog.csdn.net/Ljy_cx_21_4_3/article/details/130755256
Recomendado
Clasificación