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

using ref to delete Node in the middle of a linked list, given only access to that node

我有办法。所以我不需要帮助,但我有一个问题。此代码有效:

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

当你打电话时

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;