题目:实现一个函数,复制一个复杂链表,复杂链表中,每个节点除了有一个next指针指向下一个节点外,还有一个sibling指针指向链表中的任意节点或null节点
import java.util.HashMap;
import java.util.Map;
public class Clone {
public static Node clone(Node head){
if(head==null)
return null;
Node ans = new Node(head.getData());
Node tempO = head;
Node tempC = ans;
HashMap
map = new HashMap<>();
map.put(tempO, tempC);
while(tempO.getNext()!=null){
tempC.setNext(new Node(tempO.getNext().getData()));
tempO = tempO.getNext();
tempC = tempC.getNext();
map.put(tempO, tempC);
}
for(Map.Entry
entry : map.entrySet()){
Node key = entry.getKey();
Node sibling = key.getSibling();
Node target = map.get(sibling);
Node source = entry.getValue();
source.setSibling(target);
}
return ans;
}
}
class Node{
private int data;
private Node next;
private Node sibling;
public Node getSibling() {
return sibling;
}
public void setSibling(Node sibling) {
this.sibling = sibling;
}
public Node(int data) {
super();
this.data = data;
}
public int getData() {
return data;
}
public void setData(int data) {
this.data = data;
}
public Node getNext() {
return next;
}
public void setNext(Node next) {
this.next = next;
}
@Override
public String toString() {
return "Node [data=" + data + "]";
}
public Node() {
super();
}
}