我有类似于List的数据结构,但我无法使用任何内置容器(List<>等)。我想保留一个“指针指针”又名“尾巴”,它指向这个列表的尾部。在C ++中它应该是这样的:
class MyList {
Node* head;
Node** tail; // tail is just a pointer to the "next" pointer of the end of the list.
MyList() {
head = null;
tail = &head;
}
bool isEmpty() {
return head == null;
}
void add(int val) {
*tail = new Node();
(*tail)->val = val;
tail = &((*tail)->next);
}
}
如何在C#中实现这一点?谢谢!
答案 0 :(得分:4)
如何使用LinkedList代替List<> ...?
答案 1 :(得分:1)
你是对的,C#不能(安全地)实现指向指针的指针。因此,像你这样的可爱代码是不可能的。这是我能做的最好的事情。
public class Node {
public Node next;
public int val;
}
class MyList {
Node head = null;
Node tail = null;
public MyList() { }
bool isEmpty() {
return head == null;
}
void add(int val) {
if (isEmpty())
head = tail = new Node();
else {
tail.next = new Node();
tail = tail.next;
}
tail.val = val;
}
}
不错,是吗?几乎完全相同的长度和(我认为)稍微容易理解。
C ++中有强大的功能在C#中不可用,但根据我的经验,C#是一种效率更高的语言,即使对于像这样的低级代码也是如此。
如果你有其他一些你认为不会产生这种简单翻译的代码,请发帖,我们会看到我们能做些什么。