무작위 포인터로 목록 복사
'임의 포인터를 사용하여 목록 복사' 문제에 대한 자세한 가이드 및 Python 구현입니다.
1. 배우다
'임의 포인터를 사용하여 목록 복사' 문제는 연결 목록 섹션의 주요 과제입니다.
이 구현은 Python의 쉬운 수준 논리에 중점을 둡니다.
우리는 제공되는 솔루션에서 기술적 정확성과 코드 가독성을 최우선으로 생각합니다.
2. Real-World Applications
3. Visual Intuition
무작위 포인터를 사용하여 목록 복사의 논리 흐름을 시각화합니다.
4. Prerequisites
5. Step-by-Step Thinking
1. Understand the problem
Copy List With Random Pointer의 문제 설명을 주의 깊게 읽어보세요.
2. Formulate brute force
간단한 반복 솔루션 초안을 작성합니다.
3. Identify inefficiency
중복 계산을 찾으십시오.
4. Optimize search path
해싱이나 정렬을 사용하여 프로세스 속도를 높입니다.
5. Final Implementation
생산 표준에 맞게 코드를 정리합니다.
문제 설명
길이 n의 연결 목록은 각 노드에 목록의 모든 노드를 가리킬 수 있는 추가 무작위 포인터 또는 null이 포함되도록 제공됩니다.
목록의 전체 복사본을 구성합니다. 깊은 복사본은 정확히 n개의 새 노드로 구성되어야 하며, 각 새 노드의 값은 해당 원본 노드의 값으로 설정됩니다. 새 노드의 다음 포인터와 임의 포인터는 모두 원래 목록과 복사된 목록의 포인터가 동일한 목록 상태를 나타내도록 복사된 목록의 새 노드를 가리켜야 합니다.
목록은 [val, random_index] 쌍의 목록으로 표시됩니다. 여기서 random_index는 무작위 포인터가 가리키는 노드의 인덱스이거나 null을 가리키는 경우 -1입니다. 동일한 형식으로 전체 복사본을 반환하는 copyRandomList(head: list) -> list 함수를 구현하세요.
- •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
- 빈 입력 구조
- 단일 요소 입력
- 큰 수치 범위
해결할 준비가 되셨나요?
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
표준 연결 목록 문제 속성이 적용됩니다.
관련 질문
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에서 목록을 정렬하는 방법(오름차순 및 내림차순)
sort() 메서드와 sorted() 함수를 사용하여 Python에서 목록을 정렬하는 방법을 알아보세요. 사용자 정의 키 정렬 및 역순 예시를 살펴보세요.
Python 목록 메서드 치트 시트
Python 목록 작업에 대한 빠른 참조 가이드입니다. 요소 추가, 삽입, 제거, 정렬 및 분할을 마스터합니다.
Python 대 JavaScript: 어떤 프로그래밍 언어가 가장 좋나요?
Python과 JavaScript를 포괄적으로 비교합니다. 구문 차이점, 성능, 사용 사례(백엔드와 프런트엔드) 및 코딩 예제를 살펴보세요.