C# 链表的递归插入法

C# 链表的递归插入法,c#,.net,C#,.net,我正在学习C#,我为链表制作了一个递归插入方法: public static int recursiveInsert(ref int value, ref MyLinkedList list) { if (list == null) return new MyLinkedList(value, null); else { list.next = recursiveInsert(ref int value, ref list.next);

我正在学习C#,我为链表制作了一个递归插入方法:

public static int recursiveInsert(ref int value, ref MyLinkedList list) {
    if (list == null)
        return new MyLinkedList(value, null);
    else {
        list.next = recursiveInsert(ref int value, ref list.next);
        return list;
    }
}
如何修改此方法以使递归调用如下所示:

recursiveInsert(value, ref list.next)
而不是:

list.next = recursiveInsert(ref int value, ref list.next);

由于您从未实际更改通过引用传递的参数,因此根本无法通过引用传递它们。您需要认识到,
MyLinkedList
作为引用类型(它绝对应该是引用类型)意味着您没有传递对象本身的值,而是传递了对它的引用,因此您可以在不通过引用传递引用的情况下对该引用进行变异。)只需删除
ref
(并将您的返回类型修正为正确的)然后您就完成了:

public static MyLinkedList recursiveInsert(int value, MyLinkedList list)
{
    if (list == null)
        return new MyLinkedList(value, null);
    else
    {
        list.next = recursiveInsert(value, list.next);
        return list;
    }
}

由于您从未实际更改通过引用传递的参数,因此根本不能通过引用传递它们。您需要认识到
MyLinkedList
是一种引用类型(它绝对应该是一种引用类型)这意味着您没有传递对象本身的值,而是传递了对它的引用,因此您可以在不通过引用传递引用的情况下对该引用进行变异。)只需删除
ref
(并将返回类型修正为正确)的所有用法,即可完成以下操作:

public static MyLinkedList recursiveInsert(int value, MyLinkedList list)
{
    if (list == null)
        return new MyLinkedList(value, null);
    else
    {
        list.next = recursiveInsert(value, list.next);
        return list;
    }
}

但是,如果没有人在方法内部更改“ref value”,那么为什么需要“ref value”,这样就没有人会在调用后读取“changed”值?您的返回签名和
return
语句并不匹配。请按ref传递列表,并将
值作为函数的返回值传递。此外,这将导致Stackoverflow异常,因为您从未停止递归。@Gusman不会在每次添加值时创建新列表,因为如果添加值,则列表不为null,因此不会创建新列表。您不只是想添加节点而不是linkedlist吗?但如果在方法中没有人更改它,为什么需要“ref value”,因此,没有人会在调用后读取“更改的”值?您的返回签名和
return
语句不匹配。请按ref传递列表,并将
值作为函数的返回值。此外,这将导致Stackoverflow异常,因为您从未停止递归。@Gusman不会在每次添加值时创建新列表,因为如果添加值,列表不会为null,因此不会生成新列表。您不想添加节点而不是linkedlist吗?好的,那太好了!谢谢!:)好的,太好了!谢谢!:)