使用ref删除链接列表中间的节点,只允许访问该节点

时间:2016-02-09 12:02:58

标签: c# .net linked-list ref

我有解决方案。所以我不需要帮助,但我有一个问题。此代码有效:

public void Delete(ref Node n)
{
    n = n.next;
}

LinkedList list = new LinkedList();
list.AddTail(4);
list.AddTail(3);
list.AddTail(2);
list.AddTail(1);
list.AddTail(0);

list.Delete(ref list.head.next.next);

但是这段代码没有:

Node n = list.head.next.next;
list.Delete(ref n);

为什么?

编辑:

public class Node
{
    public int number;
    public Node next;

    public Node(int number, Node next)
    {
        this.number = number;
    }
}

1 个答案:

答案 0 :(得分:0)

致电时

list.Delete(ref list.head.next.next);

您将引用(指针)更改为字段List.next。

但如果你打电话

list.Delete(ref n);

您可以更改局部变量的引用(指针)。

只是尝试将代码内联:

list.Delete(ref list.head.next.next);

看起来像

list.head.next.next = list.head.next.next.next;

但是

Node n = list.head.next.next; 
list.Delete(ref n);

看起来像

Node n = list.head.next.next; 
n = n.next;