Leetcode Java Copy List with Random Pointer
업데이트:
문제
코드
class Solution {
public Node copyRandomList(Node head) {
return this.recursive(head, new HashMap<>());
}
private Node recursive(Node node, Map<Node, Node> map) {
if (node == null) {
return null;
} else if (map.containsKey(node)) {
return map.get(node);
} else {
Node temp = new Node(node.val);
map.put(node, temp);
temp.next = this.recursive(node.next, map);
temp.random = this.recursive(node.random, map);
return temp;
}
}
}
결과
설명
- 주어진 임의 포인터와 다음 Node를 이어주는 연결된 Node인 head를 이용하여 동일한 형태로 새롭게 구성된 연결된 Node를 만드는 문제이다.
- 임의 포인터와 Node들은 주어진 Node인 head와 연결된 모든 Node들과 연관되어서는 안된다.
- 재귀 호출을 이용하여 주어진 Node인 head를 Map을 새로 정의하여 동일한 형태로 새롭게 구성된 연결된 Node를 만들어 주어진 문제의 결과로 반환한다.
- head가 null인 경우 해당 Node가 존재하지 않는다는 의미이므로, null을 반환한다.
- map에 node가 존재하는 경우 이전에 해당 값에 해당하는 Node를 만나서 새로운 Node로 만들어 map에 저장된 경우이므로, map에서 node를 꺼내 반환한다.
- 그 외의 경우 새로운 Node를 만들어야 하므로, node를 이용하여 새로운 Node인 temp를 만들어 map에 넣어주고 temp.next와 temp.random의 Node는 재귀 호출을 이용하여 Node를 연결시켜주고 temp를 반환한다.
소스
Sample Code는 여기에서 확인 가능합니다.
댓글남기기