复杂链表的复制
题目
复制一个复杂链表。在复杂链表中,每个节点除了有一个next指向下一个节点外,还有一个sbiling指向链表中的任意节点或者null。
class Node{
int value;
Node next;
Node sbiling;
}
思路
第一步:根据原始链表的每个结点N创建对应的N’,并把N’连在N的后面
第二步:B’.sbiling就记录在了B.sbiling.next
第三部:奇偶分开
代码
public static Node copy(Node head){
copyList(head);
setSbiling(head);
return disConnectList(head);
}
public static void copyList(Node head){
Node node =head;
while(node != null){
Node copyNode = new Node();
copyNode.value = node.value;
copyNode.next = node.next;
copyNode.sbiling = null;
node.next = copyNode;
node = copyNode.next;
}
}
public static void setSbiling(Node head){
Node node =head;
while(node != null){
Node copyNode = node.next;
if(node.sbiling != null){
copyNode.sbiling = node.sbiling.next;
}
node = copyNode.next;
}
}
public static Node disConnectList(Node head){
Node node = head;
Node copyHead = null;
Node copyNode = null;
if(node != null){
copyHead = node.next;
copyNode = node.next;
node.next = copyNode.next;
node = node.next;
}
while(node != null){
copyNode.next = node.next;
copyNode = copyNode.next;
node.next = copyNode.next;
node = node.next;
}
return copyHead;
}