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并没有被再次赋值。这是因为引用变量共享一个堆中内存区的关系吗?
我在中级C#编程教程也学习过了引用变量,其中类是引用变量,node=head;这个赋值其实是赋值内存地址(栈),即node和head都指向同一个堆的区,所以改变node的东西就是改动了与head同样的堆空间,所以跟你分析的一样吧。(初学者分析意见)