2011-12-20 3 views
5

nodo della lista dove ogni elemento punta al successivo elemento e il capo della lista sarebbe simile a questa:Come implementare questa struttura come una classe senza puntatori in C#?

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

testa può cambiare, quindi stavamo usando Nodo ** testa. So che le classi vengono passate come riferimento, quindi posso fare i primi 2 attributi in questo modo:

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

Come rendere l'attributo head?

risposta

5

fare una classe involucro per prendere il posto di un puntatore doppio:

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

E come si risolve il problema qui? L'uso di 'Reference ' ancora non causerà una modifica nel nodo genitore da riflettere localmente ... –

+5

Lo sarà se la testa di ogni Node è la stessa istanza di Reference. –

+0

La LinkedList nella risposta di @ReedCopsey dovrebbe utilizzare anche la stessa istanza di riferimento per trovare il nodo principale. Quindi funziona, ma non sono sicuro che questo sia il modo "giusto" per farlo. –

5

Tipicamente, questo viene gestito passando un riferimento all'oggetto che contiene. Se questo è per una lista concatenata, per esempio, si potrebbe fare:

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; 
    } 
} 

In questo modo, quando l'elemento "testa" della lista attuale contiene i cambiamenti dei nodi, la proprietà nella classe rifletterà automaticamente il nuovo valore.

Problemi correlati