임의 포인터로 목록 복사
n
인 연결 목록이 제공되어 각 노드가 목록의 모든 노드 또는 null
를 가리킬 수 있는 추가 임의 포인터를 포함합니다.목록의 deep copy을 구성합니다. 딥 카피는 정확히
n
개의 새로운 노드로 구성되어야 하며, 각각의 새 노드에는 해당하는 원래 노드의 값으로 설정된 값이 있습니다. 새 노드의 next
및 random
포인터는 원본 목록과 복사된 목록의 포인터가 동일한 목록 상태를 나타내도록 복사된 목록의 새 노드를 가리켜야 합니다. 새 목록의 어떤 포인터도 원래 목록의 노드를 가리켜서는 안 됩니다.예를 들어 원래 목록에 두 개의 노드
X
및 Y
가 있는 경우 (여기서 X.random --> Y
) 복사된 목록의 해당 두 노드 x
및 y
에 대해 x.random --> y
입니다.복사된 연결 목록의 헤드를 반환합니다.
연결된 목록은 입력/출력에서
n
노드 목록으로 표시됩니다. 각 노드는 [val, random_index]
쌍으로 표시됩니다.val
: Node.val
를 나타내는 정수random_index
: 0
포인터가 가리키는 노드의 인덱스(범위는 n-1
에서 random
까지), 또는 어떤 노드도 가리키지 않는 경우 null
입니다. 귀하의 코드는 원래 연결된 목록의
head
만 제공됩니다.예 1:
입력: 헤드 = [[7,null],[13,0],[11,4],[10,2],[1,0]]
출력: [[7,null],[13,0],[11,4],[10,2],[1,0]]
예 2:
입력: 헤드 = [[1,1],[2,1]]
출력: [[1,1],[2,1]]
예 3:
입력: 헤드 = [[3,null],[3,0],[3,null]]
출력: [[3,null],[3,0],[3,null]]
제약:
0 <= n <= 1000
-104 <= Node.val <= 104
Node.random
는 null
이거나 연결된 목록의 일부 노드를 가리키고 있습니다. 해결책:
"""
# Definition for a Node.
class Node:
def __init__(self, x: int, next: 'Node' = None, random: 'Node' = None):
self.val = int(x)
self.next = next
self.random = random
"""
class Solution:
def copy(self, head):
newhead = None
if head:
newhead = self.visited.get(head, Node(head.val))
self.visited[head] = newhead
if head.random != None:
newhead.random = self.visited.get(head.random, Node(head.random.val))
self.visited[head.random] = newhead.random
newhead.next = self.copy(head.next)
return newhead
def copyRandomList(self, head: 'Optional[Node]') -> 'Optional[Node]':
self.visited = {}
return self.copy(head)
Reference
이 문제에 관하여(임의 포인터로 목록 복사), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/theabbie/copy-list-with-random-pointer-1kbm텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)