Linked List Cycle
Detailed guide and Python implementation for the 'Linked List Cycle' problem.
1. Узнать
The 'Linked List Cycle' problem is a key challenge in the Linked List section.
This implementation focuses on easy-level logic in Python.
We prioritize technical accuracy and code readability in our provided solutions.
2. Real-World Applications
3. Visual Intuition
Visualizing the logic flow for Linked List Cycle.
4. Prerequisites
5. Step-by-Step Thinking
1. Understand the problem
Read the problem statement for Linked List Cycle carefully.
2. Formulate brute force
Draft a simple iterative solution.
3. Identify inefficiency
Look for redundant calculations.
4. Optimize search path
Use hashing or sorting to speed up the process.
5. Final Implementation
Clean up the code for production standards.
Постановка задачи
Given head, the head of a linked list, determine if the linked list has a cycle in it.
There is a cycle in a linked list if there is some node in the list that can be reached again by continuously following the next pointer. Internally, pos is used to denote the index of the node that tail's next pointer is connected to. Note that pos is not passed as a parameter.
Return true if there is a cycle in the linked list. Otherwise, return false.
The input is given as a list of values and an integer pos (the index where the tail connects to, -1 if no cycle). Implement a function hasCycle(head: list, pos: int) -> bool.
- •The number of nodes in the list is in the range [0, 10000]
- •-100000 <= Node.val <= 100000
- •pos is -1 or a valid index in the linked list
Примеры
[3,2,0,-4], 1
True
There is a cycle: the tail node (-4) connects back to the node at index 1 (value 2).
[1,2], 0
True
There is a cycle: the tail node (2) connects back to the node at index 0 (value 1).
[1], -1
False
There is no cycle in the list.
Need a Hint?
Edge Cases to Watch
- Empty input structures
- Single element inputs
- Large numerical bounds
Готовы решить?
Open the problem in PyRun's browser-based Python editor. Your code runs fully offline — no server required.
Интервью: идеи и вариации
Разбивка анализа сложности
Почему время: Directly evaluates all possibilities.
Почему космос: Uses standard local memory.
Почему время: Optimized paths reduce total operations.
Почему космос: May trade memory for speed.
Оптимизированный код Python для решения
Оптимизированный код Python для решения
def has_cycle_opt(head, pos=None):
if isinstance(head, list):
if pos is None or pos == -1:
h = build_linked_list(head)
else:
h = build_linked_list(head)
curr = h
cycle_node = None
idx = 0
while curr.next:
if idx == pos:
cycle_node = curr
curr = curr.next
idx += 1
if idx == pos:
cycle_node = curr
curr.next = cycle_node
return has_cycle_opt_helper(h)
return has_cycle_opt_helper(head)
def has_cycle_opt_helper(head: ListNode) -> bool:
slow, fast = head, head
while fast and fast.next:
slow = slow.next
fast = fast.next.next
if slow == fast:
return True
return FalseКод грубой силы (спойлер защищен)
Код грубой силы (спойлер защищен)
def has_cycle_brute(head, pos=None):
if isinstance(head, list):
# Rebuild linked list with a cycle
if pos is None or pos == -1:
h = build_linked_list(head)
else:
h = build_linked_list(head)
curr = h
cycle_node = None
idx = 0
while curr.next:
if idx == pos:
cycle_node = curr
curr = curr.next
idx += 1
if idx == pos:
cycle_node = curr
curr.next = cycle_node
return has_cycle_brute_helper(h)
return has_cycle_brute_helper(head)
def has_cycle_brute_helper(head: ListNode) -> bool:
seen = set()
curr = head
while curr:
if curr in seen:
return True
seen.add(curr)
curr = curr.next
return FalseAlgorithm Pattern Checklist
When dealing with Linked List data patterns.
- Are constraints clear?
- Is there a linear or logarithmic optimization possible?
Key Revision Notes
Standard Linked List problem properties apply.
Связанные вопросы
PyRun is built and maintained by an independent solo developer. If this helped your interview prep, consider buying a coffee!
Рекомендуемые ресурсы Python
Расширьте свои знания с помощью соответствующих интерактивных руководств, шпаргалок и сравнений кода.
Списки Python
Узнайте все о списках Python. Узнайте, как создавать, разрезать, изменять и перебирать массивы в Python.
Как отсортировать список в Python
Узнайте, как сортировать список в Python с помощью метода sort() и функции sorted(). Ознакомьтесь с примерами пользовательской сортировки ключей и обратного порядка.
Шпаргалка по методам списка Python
Краткое справочное руководство по операциям со списками Python. Освойте добавление, вставку, удаление, сортировку и нарезку элементов.
Python против JavaScript: какой язык программирования лучше?
Всестороннее сравнение Python и JavaScript. Изучите синтаксические различия, производительность, варианты использования (серверная и клиентская части) и примеры кодирования.