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

(66评价)
价格: 1299.00元
1对1 答疑即时回复7天无理由退款30天价保提问必答

服务保障

1对1 答疑

提供专属的一对一在线答疑,快速答疑解惑。

即时回复

及时响应学习咨询,帮助解决问题。

7天无理由退款

购买后7天内可申请无理由退款。

30天价保

购买后30天内如遇降价,可申请价保。

提问必答

对于提问做到有问必答,帮您扫清学习过程中的种种障碍

有关链表赋值的一个问题
孙宇凡发起了问答2018-03-10
2
回复
542
浏览

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条回复,点击查看
    你还没有登录,请先登录或注册!
发表回复
你还没有登录,请先 登录或 注册!