我正在尝试说明一个双向链表问题。这是我最近一直在研究的一个旧测试。
问题如下:
绘制此代码后的最终链接:
ListNode n1 = new ListNode();
ListNode n2 = new ListNode();
ListNode n3 = n1;
n1.next = n2;
n3.prev = n1;
n1.next.prev = n3.next;我迷路的地方是最后一行代码。
n1.next.prev = n3.next;
以下是解决方案:
http://www.imagechicken.com/viewpic.php?p=1242322384048558300&x=jpg
有没有人能帮我解决这个问题,或者把我引向一个好的方向?
发布于 2009-05-14 16:43:56
这一点的关键是n1和n3指向相同的ListNode。
下面是3次操作后的状态:
n1.next = n2;
// n1.prev = null;
// n1.next = n2;
// n2.prev = null;
// n2.next = null;
// n3.prev = null;
// n3.next = n2;
n3.prev = n1;
// n1.prev = n1;
// n1.next = n2;
// n2.prev = null;
// n2.next = null;
// n3.prev = n1;
// n3.next = n2;
n1.next.prev = n3.next;
// n1.prev = n1;
// n1.next = n2;
// n2.prev = n2;
// n2.next = null;
// n3.prev = n1;
// n3.next = n2;因此,在最后一条语句中,n3.next与n1.next相同,即n2。因此,最后一条语句等同于设置n2.prev = n2。
发布于 2009-05-14 16:43:27
我会试着画三个盒子。把每个盒子分成三份--三分之一是标签,三分之一是“上一个”,三分之一是“下一个”。然后从所有的"prev“和"next”到适当的标签绘制连接线,以查看事物是如何链接的。
一张图片胜过千言万语。
发布于 2009-05-14 16:45:54
这类事情会让人感到困惑,直到您意识到ListNode只有两个实例;n1、n2和n3都引用了这些实例。尤其是,n1、n2和n3的值只设置一次;因为n3的值被设置为n1,所以在这段代码中,您可以很容易地将n3替换为n1,它的工作方式也是一样的。
https://stackoverflow.com/questions/864388
复制相似问题