Home >Java >javaTutorial >Does Floyd\'s Cycle-Finding Algorithm Efficiently Detect Loops in Linked Lists?

Does Floyd\'s Cycle-Finding Algorithm Efficiently Detect Loops in Linked Lists?

Linda Hamilton
Linda HamiltonOriginal
2024-11-02 20:03:02659browse

Does Floyd's Cycle-Finding Algorithm Efficiently Detect Loops in Linked Lists?

Detecting Loops in Linked Lists using Floyd's Cycle-Finding Algorithm

Linked lists, a fundamental data structure in computer science, are often used to represent a sequence of elements. In certain scenarios, it is possible for a linked list to contain a loop, where the last node points back to a previous node, creating a circular structure. Identifying the presence of such loops is a crucial task for various operations involving linked lists.

Floyd's Cycle-Finding Algorithm

Floyd's cycle-finding algorithm, also known as the tortoise and hare algorithm, provides an efficient way to detect loops in linked lists. The algorithm operates based on the principle of moving two pointers (references) at different speeds through the list:

  1. Tortoise (Slow Pointer): Moves forward one node at a time.
  2. Hare (Fast Pointer): Moves forward two nodes at a time.

Principle:

  • Loop Present: If there is a loop in the list, the tortoise and hare will eventually meet at the same node, indicating the presence of a loop.
  • No Loop: If the list does not contain a loop, either the tortoise or the hare will reach the end of the list (a null pointer), signaling the absence of a loop.

Java Implementation

The following Java function implements Floyd's cycle-finding algorithm:

<code class="java">boolean hasLoop(Node first) {

    if(first == null) // list does not exist..so no loop either
        return false;

    Node slow, fast; // create two references.

    slow = fast = first; // make both refer to the start of the list

    while(true) {

        slow = slow.next;          // 1 hop

        if(fast.next != null)
            fast = fast.next.next; // 2 hops
        else
            return false;          // next node null => no loop

        if(slow == null || fast == null) // if either hits null..no loop
            return false;

        if(slow == fast) // if the two ever meet...we must have a loop
            return true;
    }
}</code>

Advantages

Floyd's cycle-finding algorithm offers the following advantages:

  • Constant Space Complexity: It only requires two pointers (references), making its space complexity constant (O(1)).
  • Linear Time Complexity: The algorithm's time complexity is O(n), where n is the number of nodes in the linked list.

The above is the detailed content of Does Floyd's Cycle-Finding Algorithm Efficiently Detect Loops in Linked Lists?. For more information, please follow other related articles on the PHP Chinese website!

Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn