Add solution for cycle linked list
This commit is contained in:
parent
5cafe951db
commit
b8d841ffac
2 changed files with 68 additions and 0 deletions
35
neetcode/linked_list/linked_list_cycles/README.md
Normal file
35
neetcode/linked_list/linked_list_cycles/README.md
Normal file
|
@ -0,0 +1,35 @@
|
|||
Linked List Cycle Detection
|
||||
Given the beginning of a linked list head, return true if there is a cycle in the linked list. Otherwise, return false.
|
||||
|
||||
There is a cycle in a linked list if at least one node in the list that can be visited again by following the next pointer.
|
||||
|
||||
Internally, index determines the index of the beginning of the cycle, if it exists. The tail node of the list will set it's next pointer to the index-th node. If index = -1, then the tail node points to null and no cycle exists.
|
||||
|
||||
Note: index is not given to you as a parameter.
|
||||
|
||||
Example 1:
|
||||
|
||||
|
||||
|
||||
Input: head = [1,2,3,4], index = 1
|
||||
|
||||
Output: true
|
||||
Explanation: There is a cycle in the linked list, where the tail connects to the 1st node (0-indexed).
|
||||
|
||||
Example 2:
|
||||
|
||||
|
||||
|
||||
Input: head = [1,2], index = -1
|
||||
|
||||
Output: false
|
||||
Constraints:
|
||||
|
||||
1 <= Length of the list <= 1000.
|
||||
-1000 <= Node.val <= 1000
|
||||
index is -1 or a valid index in the linked list.
|
||||
|
||||
# Solution
|
||||
## Использовать хэшмап
|
||||
|
||||
nodes = defaultdict()
|
33
neetcode/linked_list/linked_list_cycles/solution.py
Normal file
33
neetcode/linked_list/linked_list_cycles/solution.py
Normal file
|
@ -0,0 +1,33 @@
|
|||
from collections import defaultdict
|
||||
from typing import Optional
|
||||
|
||||
|
||||
class ListNode:
|
||||
def __init__(self, val=0, next=None):
|
||||
self.val = val
|
||||
self.next = next
|
||||
|
||||
|
||||
class Solution:
|
||||
def hasCycle(self, head: Optional[ListNode]) -> bool:
|
||||
nodes: set[ListNode] = set()
|
||||
cur_node = head
|
||||
while cur_node:
|
||||
lb = len(nodes)
|
||||
nodes.add(cur_node)
|
||||
cur_node = cur_node.next
|
||||
la = len(nodes)
|
||||
if lb == la:
|
||||
return True
|
||||
return False
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
s = Solution()
|
||||
e3 = ListNode(3, None)
|
||||
e2 = ListNode(2, e3)
|
||||
e1 = ListNode(1, e2)
|
||||
e0 = ListNode(0, e1)
|
||||
# k = [e0, e1, e2, e3]
|
||||
nb = s.hasCycle(e0)
|
||||
print(nb)
|
Loading…
Reference in a new issue