问题 方法参数参考

Rudraishere.

新成员
加入
5月11日,2020年
消息
1
编程经验
10+
我试图创造一个"反转链接列表"解决方案使用C#。这是代码:

C#:
    public class Solution
    {
        public class LinkedNode
        {
            public LinkedNode(int value)
            {
                Value = value;
            }
            public int Value { get; set; }
            public LinkedNode Next { get; set; }
        }

        public void ReverseLinkedList(LinkedNode head, ref LinkedNode newHead)
        {
            if (head.Next != null)
            {
                LinkedNode curr = head;// label1
                LinkedNode prev = null;
                while (curr.Next != null)
                {
                    prev = curr;
                    curr = curr.Next;
                }
                prev.Next = null;
                curr.Next = prev; // label2
                if (newHead == null)
                {
                    newHead = curr;
                }
                ReverseLinkedList(head, ref newHead);
            }
        }
    }

奇怪的是,当标签2中的代码运行时,它也会更新新头对象,即使在Label1中重新分配Curr对象。为什么这发生了?
 
最后编辑了主持人:

jmplhinney.

C#论坛主持人
工作人员
加入
2011年4月23日
消息
3,719
地点
悉尼,澳大利亚
编程经验
10+
如果修改由此引用的对象 Curr. 反映在 新头 然后他们显然他们指的是相同的对象。你可能不认为他们应该是显然的。难以读取代码的原因很难说出来,但你不必只读取代码。您可以按行顺序调试代码并观察变量的值。你可以在表达式上放置一张手表 Curr. == newhead. 或在立即窗口中评估它,以查看该两个变量是否有关同一对象。
 
最佳 底部