思路:
先复制节点
再复制sibling节点的next
最后两个指针进行剥离。
static Node getCopy(Node head) {
copyBrother(head);
copySibling(head);
return split(head);
}
static void copyBrother(Node head) {
if (head == null)
return;
Node temp = head;
while (temp != null) {
Node node = new Node(temp.value);
node.next = temp.next;
temp.next = node;
temp = temp.next.next;
}
}
static void copySibling(Node head) {
if (head == null)
return;
Node temp = head;
Node stemp = head.next;
while (temp != null && stemp != null) {
if (temp.sibling != null)
stemp.sibling = temp.sibling.next;
temp = stemp.next;
if (temp != null)
stemp.next = temp.next;
}
}
static Node split(Node head) {
if (head == null)
return null;
Node temp = head;
Node stemp = head.next;
Node sHead = stemp;
while (temp != null && stemp != null) {
temp.next = stemp.next;
temp = temp.next;
if (temp!=null)
stemp.next = temp.next;
stemp = stemp.next;
}
return sHead;
}