如何在C#中使用“Pointer to Pointer”?

时间:2014-06-05 07:28:50

标签: c# c++ pointers

我有类似于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#中实现这一点?谢谢!

2 个答案:

答案 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#是一种效率更高的语言,即使对于像这样的低级代码也是如此。

如果你有其他一些你认为不会产生这种简单翻译的代码,请发帖,我们会看到我们能做些什么。