---
tags: data_structure_python
---
# Linked List Cycle <img src="https://img.shields.io/badge/-easy-brightgreen">
Given a linked list, determine if it has a cycle in it.
To represent a cycle in the given linked list, we use an integer ```pos``` which represents the position (0-indexed) in the linked list where tail connects to. If ```pos``` is ```-1```, then there is no cycle in the linked list.
<ins>**Example 1:**</ins>
```
Input: head = [3,2,0,-4], pos = 1
Output: true
Explanation: There is a cycle in the linked list, where tail connects to the second node.
```
<br>
<div style="text-align:center">
<img src="https://assets.leetcode.com/uploads/2018/12/07/circularlinkedlist.png" width=50%>
</div>
<ins>**Example 2:**</ins>
```
Input: head = [1,2], pos = 0
Output: true
Explanation: There is a cycle in the linked list, where tail connects to the first node.
```
<br>
<div style="text-align:center">
<img src="https://assets.leetcode.com/uploads/2018/12/07/circularlinkedlist_test2.png">
</div>
<ins>**Example 3:**</ins>
```
Input: head = [1], pos = -1
Output: false
Explanation: There is no cycle in the linked list.
```
<br>
<div style="text-align:center">
<img src="https://assets.leetcode.com/uploads/2018/12/07/circularlinkedlist_test3.png">
</div>
# Solution
### Solution 1: Version 1 (Draft)
```python=
#Definition for singly-linked list.
class ListNode:
def __init__(self, x):
self.val = x
self.next = None
class Solution:
def hasCycle(self, head: ListNode) -> bool:
# O(n).
pointer1 = head
if pointer1 == None or pointer1.next == None or pointer1.next.next == None:
return False
pointer2 = head.next.next
while pointer1.next != None :
if pointer1.val == pointer2.val:
return True
if pointer2.next == None or pointer2.next.next == None:
return False
pointer1 = pointer1.next
pointer2 = pointer2.next.next
return False
```
### Solution 2: Version 2 (Clean)
```python=
#Definition for singly-linked list.
class ListNode:
def __init__(self, x):
self.val = x
self.next = None
class Solution:
def hasCycle(self, head: ListNode) -> bool:
# O(n).
if head == None or head.next == None:
return False
slow = head
fast = head.next
while slow != fast:
if fast == None or fast.next == None:
return False
slow = slow.next
fast = fast.next.next
return True
```