Copy List with Random Pointer
Description
A linked list is given such that each node contains an additional random pointer which could point to any node in the list or null.
Return a deep copy of the list.
Challenge
Could you solve it with O(1)O(1) space?
/**
* Definition for singly-linked list with a random pointer.
* class RandomListNode {
* int label;
* RandomListNode next, random;
* RandomListNode(int x) { this.label = x; }
* };
*/
public class Solution {
/**
* @param head: The head of linked list with a random pointer.
* @return: A new head of a deep copy of the list.
*/
public RandomListNode copyRandomList(RandomListNode head) {
// write your code here
if(head == null){
return null ;
}
copyNode(head) ;
copyRandom(head) ;
return splitList(head) ;
}
public void copyNode(RandomListNode head){
while(head != null ){
RandomListNode newNode = new RandomListNode(head.label) ;
newNode.random = head.random ;
newNode.next = head.next ;
head.next = newNode ;
head = head.next.next ;
}
}
public void copyRandom(RandomListNode head){
while(head != null){
if(head.next.random != null){
head.next.random = head.random.next ;
}
head = head.next.next ;
}
}
public RandomListNode splitList(RandomListNode head){
RandomListNode newHead = head.next ;
while(head != null){
RandomListNode temp = head.next ;
head.next = temp.next ;
head = head.next ;
if(temp.next != null){
temp.next = temp.next.next ;
}
}
return newHead ;
}
}
本文介绍了一种解决复杂链表深拷贝问题的方法,该链表中的节点包含一个额外的随机指针。文章详细阐述了如何在O(1)空间复杂度下完成这一任务,并提供了具体的实现步骤。
1290

被折叠的 条评论
为什么被折叠?



