una pasar otra metodo listas lista datos copyto copiar another c# linked-list

c# - pasar - Duplicar una lista vinculada



metodo clone java (3)

Puedes hacerlo de una vez, algo como esto:

public static Node Duplicate(Node n) { // handle the degenerate case of an empty list if (n == null) { return null; } // create the head node, keeping it for later return Node first = new Node(); first.Data = n.Data; // the ''temp'' pointer points to the current "last" node in the new list Node temp = first; n = n.Next; while (n != null) { Node n2 = new Node(); n2.Data = n.Data; // modify the Next pointer of the last node to point to the new last node temp.Next = n2; temp = n2; n = n.Next; } return first; }

Escribí un método que crea una copia de la lista vinculada.
¿Pueden pensar en algún método mejor que esto?

public static Node Duplicate(Node n) { Stack<Node> s = new Stack<Node>(); while (n != null) { Node n2 = new Node(); n2.Data = n.Data; s.Push(n2); n = n.Next; } Node temp = null; while (s.Count > 0) { Node n3 = s.Pop(); n3.Next = temp; temp = n3; } return temp; }


@Greg, tomé tu código y lo hice incluso un poco más corto :)

public static Node Duplicate(Node n) { // Handle the degenerate case of an empty list if (n == null) return null; // Create the head node, keeping it for later return Node first = new Node(); Node current = first; do { // Copy the data of the Node current.Data = n.Data; current = (current.Next = new Node()); n = n.Next; } while (n != null) return first; }

La construcción Do-While a menudo se olvida, pero encaja bien aquí.
Un método Node.Clone () sería bueno también.

+1 a Greg por el buen ejemplo.


Método recursivo para listas pequeñas / medianas.

public static Node Duplicate(Node n) { if (n == null) return null; return new Node() { Data = n.Data, Next = Duplicate(n.Next) }; }