If the current element is zero, continue to the next element.
Initialize slow and fast pointers to the current index.
While the product of the current element and the element at the fast pointer is positive:
a. Move the slow pointer one step forward.
b. Move the fast pointer two steps forward.
c. If the slow pointer equals the fast pointer, check for a self-loop. If it's not a self-loop, return true.
If a cycle is not found, mark all elements visited in this iteration as zero.
If no cycle is found after iterating through all elements, return false.