tema:
Una lista de entrada compleja (cada nodo tiene un valor de nodo, y dos punteros, uno de puntero al siguiente nodo, un puntero especial a cualquier otro nodo), devuelve un valor después de la cabeza de la replicación lista compleja. (Tenga en cuenta que los resultados de salida no vuelven referencia de nodo de parámetros, de lo contrario el programa volverá preguntas condenados vacíos directamente)
Respuesta:
Solución uno:
Leer otras ideas de la gente a escribir, las ideas son las siguientes fuentes :( ver la marca de agua)
Código es el siguiente:
/*
public class RandomListNode {
int label;
RandomListNode next = null;
RandomListNode random = null;
RandomListNode(int label) {
this.label = label;
}
}
*/
public class Solution {
public RandomListNode Clone(RandomListNode pHead)
{
if(pHead==null){
return null;
}
//next
RandomListNode current = pHead;
while(current!=null){
RandomListNode node = new RandomListNode(current.label);
node.next = current.next;
current.next = node;
current = node.next;
}
//random
current = pHead;
while(current!=null){
current.next.random = (current.random==null?null:current.random.next);
current = current.next.next;
}
//result
current = pHead;
RandomListNode result = pHead.next;
while(current!=null){
RandomListNode cloneNode = current.next;
current.next = cloneNode.next;
cloneNode.next = cloneNode.next==null?null:cloneNode.next.next;
current = current.next;
}
return result;
}
}