题目描述
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.
解题思路:
- 对于每个节点都copy一个节点,令copy的节点变成原来节点的下一个
- 对于每个copy节点,他的前一个节点(即原来节点)的random节点的下一个节点就是copy节点的random节点
- 分离
/**
* 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 {
public RandomListNode copyRandomList(RandomListNode head) {
if (head == null) {
return null;
}
RandomListNode copy, tmpHead = head;
while (tmpHead != null) {
copy = new RandomListNode(tmpHead.label);
copy.next = tmpHead.next;
tmpHead.next = copy;
tmpHead = tmpHead.next.next;
}
RandomListNode t = head, s = head.next;
while (t != null) {
t.next.random = t.random == null ? null : t.random.next;
t = t.next.next;
}
while (s != null && s.next != null) {
s.next = s.next.next;
s = s.next;
}
return head.next;
}
}