2011-12-20 30 views
5

Node của danh sách, nơi mọi điểm yếu tố để phần tử tiếp theo và người đứng đầu danh sách sẽ trông như thế này:Làm thế nào để thực hiện cấu trúc này như là một lớp mà không có con trỏ trong C#?

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

đầu có thể thay đổi, do đó chúng tôi đã sử dụng Node ** đầu. Tôi biết các lớp học được chuyển làm tham chiếu, vì vậy tôi có thể tạo 2 thuộc tính đầu tiên như sau:

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

Làm cách nào để tạo thuộc tính head?

Trả lời

5

Tạo một lớp wrapper để chiếm chỗ của một con trỏ kép:

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

Và cách này giải quyết vấn đề ở đây? Sử dụng 'Tham chiếu ' sẽ không gây ra thay đổi nào trong nút cha được phản ánh cục bộ ... –

+5

Nó sẽ xảy ra nếu mọi đầu của nút là cùng một thể hiện tham chiếu. –

+0

LinkedList trong câu trả lời của @ReedCopsey cũng nên sử dụng cùng một cá thể tham chiếu đó để tìm nút đầu của nó. Sau đó, nó hoạt động, nhưng tôi không chắc chắn đây là cách "đúng" để làm điều đó. –

5

thường, điều này được xử lý bằng cách thông qua một tham chiếu đến đối tượng chứa. Nếu đây là một danh sách liên kết, ví dụ, bạn có thể làm:

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

Bằng cách này, khi "đầu" yếu tố của danh sách thực tế có chứa những thay đổi nút, tài sản trong lớp sẽ tự động phản ánh mới giá trị.

Các vấn đề liên quan