2011-12-20 8 views
5

nodo de la lista donde cada elemento apunta al siguiente elemento y la cabeza de la lista se vería así:¿Cómo implementar esta estructura como una clase sin punteros en C#?

typedef struct Node { 
    int value; 
    Node* next; 
    Node** head; 
} Node; 

cabeza puede cambiar, por lo tanto, estábamos usando Nodo ** cabeza. Sé que las clases se pasan como referencia, para que pueda hacer los primeros 2 atributos como esto:

class Node { 
    int value; 
    Node next; 
    ???? 
} 

Como hacer atribuyen la cabeza?

Respuesta

5

hacer una clase envoltura para tomar el lugar de un puntero doble:

class Reference<T> 
{ 
    public T Value {get; set;} 
} 
+2

¿Y cómo soluciona esto el problema aquí? El uso de 'Referencia ' todavía no causará que un cambio en el nodo padre se refleje localmente ... –

+5

Lo hará si el encabezado de cada Nodo es la misma instancia de Referencia. –

+0

La LinkedList en la respuesta de @ReedCopsey también debe usar esa misma instancia de referencia para encontrar su nodo principal. Entonces funciona, pero no estoy seguro de que esta sea la manera "correcta" de hacerlo. –

5

Típicamente, esto es manejado por que pasa una referencia al objeto que contiene. Si se trata de una lista enlazada, por ejemplo, puede hacer:

class Node 
{ 
    int Value { get; set; } 
    Node Next { get; set; } 
    LinkedList list; 

    Node Head { get { return list.Head; } } 

    public Node(LinkedList parent) 
    { 
     this.list = parent; 
    } 
} 

De esta manera, cuando el elemento de "cabeza" de la lista real que contiene los cambios de nodos, la propiedad de la clase reflejará automáticamente el nuevo valor.

Cuestiones relacionadas