2011-12-20 2 views
5

узел списка, где каждый элемент указывает на следующий элемент и главе списка будет выглядеть следующим образом:Как реализовать эту структуру как класс без указателей в C#?

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

головка может меняться, поэтому мы использовали Node ** голову. Я знаю, что классы передаются как ссылка, поэтому я могу сделать первые 2 атрибута следующим образом:

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

Как сделать атрибут головы?

ответ

5

сделать класс обертки, чтобы занять место двойного указателя:

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

И как это решить проблему здесь? Использование 'Reference ' все равно не приведет к тому, что изменение в родительском узле будет отображаться локально ... –

+5

Это будет, если каждый заголовок узла является тем же экземпляром Reference. –

+0

LinkedList в ответ @ReedCopsey также должен использовать тот же экземпляр справки, чтобы найти его головной узел. Затем он работает, но я не уверен, что это «правильный» способ сделать это. –

5

Как правило, это осуществляется путем передачи ссылки на объект, содержащий. Если это для связанного списка, например, вы можете сделать:

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

Таким образом, когда элемент «голова» из фактического списка, содержащего изменения узла, свойство в классе будет автоматически отражать новый стоимость.

Смежные вопросы