您的位置:首页 > 运维架构

Copy List with Random Pointer

2014-03-26 19:23 288 查看
题目原型:

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.

基本思路:

题目的意思就是深度复制一个链表,这个链表与普通链表不同之处在于多了一个random指针,这个指针可以指向链表中任何一个元素或者指向NULL。初一看,我们最容易想到那种时间复杂度为O(n2)的做法,但是在OJ上被N/A了。换一种思路,借助map,我们可以把时间复杂度降为O(n)。



public RandomListNode copyRandomList(RandomListNode head)
{
if(head==null)
return head;
RandomListNode newHead = null;
//复制不带random指针的链表和新节点与原节点的联系,利用map存储联系
RandomListNode p = head;
RandomListNode newNode;
RandomListNode q = null;

Map<RandomListNode, RandomListNode> map = new HashMap<RandomListNode, RandomListNode>();

while(p!=null)
{
newNode = new RandomListNode(p.label);
newNode.random = null;
newNode.next = null;
map.put(p, newNode);
if(p==head)
{
newHead = newNode;
q = newHead;
p = p.next;
continue;
}
q.next = newNode;
q = newNode;
p = p.next;
}

//根据关系寻找random指针
p = head;
q = newHead;
while(p!=null)
{
if(p.random!=null)
{
q.random = map.get(p.random);
}
p = p.next;
q = q.next;
}
return newHead;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: