【解题思路】
第一遍遍历链表,新建一条常规链表;第二次遍历找到需要找的random节点,并绑定在新链表上。
/*
// Definition for a Node.
class Node {
int val;
Node next;
Node random;
public Node(int val) {
this.val = val;
this.next = null;
this.random = null;
}
}
*/
class Solution {
public Node copyRandomList(Node head) {
Node newHead = new Node(0);
Node p = head, q = newHead;
while(p != null)
{
Node r = new Node(p.val);
q.next = r;
r.next = null;
q = r;
p = p.next;
}
p = head;
q = newHead.next;
while(p != null)
{
if(p.random == null)
{
q.random = null;
}
else
{
Node r = head, s = newHead.next;
int cnt = 0;
while(r != null && r != p.random)
{
cnt++;
r = r.next;
}
while(cnt > 0)
{
s = s.next;
cnt--;
}
q.random = s;
}
p = p.next;
q = q.next;
}
return newHead.next;
}
}