Copy List With Random Pointer
Detailed guide and Python implementation for the 'Copy List With Random Pointer' problem.
1. Узнать
The 'Copy List With Random Pointer' 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 Copy List With Random Pointer.
4. Prerequisites
5. Step-by-Step Thinking
1. Understand the problem
Read the problem statement for Copy List With Random Pointer 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
Очистите код для производственных стандартов. ---ПИСЕП--- Пустые входные структуры ---ПИСЕП--- Одноэлементные входы ---ПИСЕП--- Большие числовые границы ---ПИСЕП--- Объясните логику вашего подхода со связанным списком. ---ПИСЕП--- Обсудите крайние случаи, такие как нулевые или пустые входные данные. ---ПИСЕП--- Применяются стандартные свойства проблемы связанного списка. ---ПИСЕП--- Рассмотрите возможность использования структур данных, специфичных для связанных списков, таких как наборы или кучи. ---ПИСЕП--- Добавить два числа ---ПИСЕП--- Подробное руководство и реализация __PYTERM_0__ для задачи «Сложение двух чисел». ---ПИСЕП--- Вам даны два непустых связанных списка, представляющих два неотрицательных целых числа. Цифры хранятся в обратном порядке, и каждый из их узлов содержит одну цифру. Сложите два числа и верните сумму в виде связанного списка. Вы можете предположить, что эти два числа не содержат ведущих нулей, кроме самого числа 0. Связанные списки представлены как списки __PYTERM_1__. Реализуйте функцию __PYCODE_0__, которая возвращает сумму в виде списка в обратном порядке цифр. ---ПИСЕП--- 150 лучших интервью ---ПИСЕП--- Связанный список ---ПИСЕП--- Задача «Добавить два числа» — ключевая задача в разделе «Связанный список». ---ПИСЕП--- Эта реализация фокусируется на логике простого уровня в __PYTERM_0__. ---ПИСЕП--- В предоставляемых нами решениях мы уделяем приоритетное внимание технической точности и читаемости кода. ---ПИСЕП--- Алгоритмическая инженерия ---ПИСЕП--- Соревновательное программирование ---ПИСЕП--- Технические оценки ---ПИСЕП--- Визуализация логического процесса сложения двух чисел. ---ПИСЕП--- Внимательно прочитайте условие задачи «Сложение двух чисел». ---ПИСЕП--- Нарисуйте простое итеративное решение. ---ПИСЕП--- Ищите лишние вычисления. ---ПИСЕП--- Используйте хеширование или сортировку, чтобы ускорить процесс. ---ПИСЕП--- Очистите код для производственных стандартов. ---ПИСЕП--- Пустые входные структуры ---ПИСЕП--- Одноэлементные входы ---ПИСЕП--- Большие числовые границы ---ПИСЕП--- Объясните логику вашего подхода со связанным списком. ---ПИСЕП--- Обсудите крайние случаи, такие как нулевые или пустые входные данные. ---ПИСЕП--- Применяются стандартные свойства проблемы связанного списка. ---ПИСЕП--- Рассмотрите возможность использования структур данных, специфичных для связанных списков, таких как наборы или кучи. ---ПИСЕП--- Цикл связанного списка ---ПИСЕП--- Подробное руководство и реализация __PYTERM_0__ для проблемы «Цикл связанного списка». ---ПИСЕП--- Учитывая заголовок, заголовок связанного списка, определите, есть ли в связанном списке цикл. В связанном списке существует цикл, если в списке есть некоторый узел, к которому можно снова добраться, непрерывно следуя по следующему указателю. Внутри pos используется для обозначения индекса узла, к которому подключен следующий указатель хвоста. Обратите внимание, что pos не передается в качестве параметра. Возвращайте true, если в связанном списке есть цикл. В противном случае верните false. Входные данные задаются в виде списка значений и целого числа pos (индекс, к которому соединяется хвост, -1, если цикла нет). Реализуйте функцию __PYCODE_0__. ---ПИСЕП--- 150 лучших интервью ---ПИСЕП--- Связанный список ---ПИСЕП--- Проблема «Цикла связанных списков» является ключевой проблемой в разделе «Связанные списки». ---ПИСЕП--- Эта реализация фокусируется на логике простого уровня в __PYTERM_0__. ---ПИСЕП--- В предоставляемых нами решениях мы уделяем приоритетное внимание технической точности и читаемости кода.
Постановка задачи
A linked list of length n is given such that each node contains an additional random pointer, which could point to any node in the list, or null.
Construct a deep copy of the list. The deep copy should consist of exactly n brand new nodes, where each new node has its value set to the value of its corresponding original node. Both the next and random pointer of the new nodes should point to new nodes in the copied list such that the pointers in the original list and copied list represent the same list state.
The list is represented as a list of pairs [val, random_index] where random_index is the index of the node the random pointer points to, or -1 if it points to null. Implement a function copyRandomList(head: list) -> list that returns the deep copy in the same format.
- •0 <= n <= 1000
- •-10000 <= Node.val <= 10000
- •Node.random is null or points to some node in the linked list
Примеры
[[7,-1],[13,0],[11,4],[10,2],[1,0]]
[[7,-1],[13,0],[11,4],[10,2],[1,0]]
The deep copy has the same structure. Node 0 (val=7) has random=null, Node 1 (val=13) has random pointing to Node 0, etc.
[[1,1],[2,1]]
[[1,1],[2,1]]
Node 0 (val=1) has random pointing to Node 1. Node 1 (val=2) has random pointing to Node 1 (itself).
[[3,-1],[3,0],[3,-1]]
[[3,-1],[3,0],[3,-1]]
Three nodes all with value 3. Node 1's random points to Node 0.
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 copy_random_list_opt(head):
if not head: return None
if isinstance(head, list):
# Already in list format, return a deep copy
import copy
return copy.deepcopy(head)
return headКод грубой силы (спойлер защищен)
Код грубой силы (спойлер защищен)
def copy_random_list_brute(head):
if not head: return None
# Map node indices to list of pairs format
if isinstance(head, list):
# Already in list format, return a deep copy
import copy
return copy.deepcopy(head)
return headAlgorithm 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. Изучите синтаксические различия, производительность, варианты использования (серверная и клиентская части) и примеры кодирования.