Unity - A计划(一年有效期) 扫二维码继续学习 二维码时效为半小时

(61评价)
价格: 2175.00元
有关链表赋值的一个问题
孙宇凡发起了问答2018-03-10
2
回复
387
浏览

public class ListNode
        {
            public int val;
            public ListNode next;
            public ListNode(int x) { val = x; }

        }

        public ListNode DeleteDuplicates(ListNode head)
        {
            ListNode node;
            if (head == null) return head;
            else node = head;
            while (node.next != null)
            {
                if (node.val == node.next.val)
                {
                    if (node.next.next != null) node.next = node.next.next;
                    else node.next = null;
                }
                else
                {
                    node = node.next;
                }
               
            }

            return head;
        }

老师您好,上段代码是一道删除链表中重复数字的题目的解答,其中声明了一个变量node = head,之后的操作都在改变node的next,而最后返回head,为什么head的next也跟着改变了?因为之后head并没有被再次赋值。这是因为引用变量共享一个堆中内存区的关系吗?

所有回复
  • Milk 2018-03-12

    我在中级C#编程教程也学习过了引用变量,其中类是引用变量,node=head;这个赋值其实是赋值内存地址(栈),即node和head都指向同一个堆的区,所以改变node的东西就是改动了与head同样的堆空间,所以跟你分析的一样吧。(初学者分析意见)

    还有-5条回复,点击查看
    你还没有登录,请先登录注册
  • siki 2018-03-12

    node = head 这个时候node跟head是同一个引用,所以修改了node就修改了head

    还有-5条回复,点击查看
    你还没有登录,请先登录注册
发表回复
你还没有登录,请先 登录或 注册!