使用 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;
我有办法。所以我不需要帮助,但我有一个问题。此代码有效:
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;