2

参考LinkedList对应的以下PDF(第14页):

很明显,需要在“p”指向的节点之后插入新节点。

http://www.cs.utep.edu/vladik/cs2401.10a/Ch_16_Linked_Lists.pdf

我的问题:

如果我们继续前进到 PDF 的第 16 页,为什么它说插入节点的语句序列非常重要。我的意思是我可以编写如下代码:

p.link = newNode; // writing this part of code first 

newNode.link = p.link; //writing this part of code after the above one.

请让我知道以不同的顺序编写这两个语句有什么区别?

谢谢

4

3 回答 3

3

有一个非常显着的差异,是的。

p.link = newNode; 
newNode.link = p.link; //p.link = newNode, per above, so now newNode.link = newNode

以前存在p.link的东西现在都丢失了,根本不再联系。而 newNode 只是链接到它自己,所以如果你跟随所有的链接,你最终会在newNode.

您可能想要的是以下选项:

newNode.link = p.link; 
p.link = newNode;  

在这种情况下,newNode.link设置为oldp.link和。p.linknewNode

于 2013-04-25T01:43:25.567 回答
2

PDF是正确的。

如果您按照上面列出的顺序执行步骤,newNode将指向自身,并且链接列表的剩余部分将“丢失”。

由于您设置p.link为 newNode,因此您不再拥有指向 p.link 之前指向的内容(下一个元素)的指针。(您可以通过p.link在将其分配给 之前将其保存到临时变量来解决此问题newNode,但这需要一个额外的变量,当它并不真正需要时。)

于 2013-04-25T01:43:12.527 回答
0

假使,假设:

这是你的新节点:

+---+
| n |
+---+

这是你的 p:

+---+
| p |
+---+

p.link = 新节点;

+---+    +---+
| p | -> | n |
+---+    +---+

newNode.link = p.link

+---+    +---+            +---+    +---+
| p | -> | q |  same with | n | -> | q |
+---+    +---+            +---+    +---+

解释

  1. p.link = newNode 表示 p 的下一个是 newNode
  2. newNode.link = p.link 表示 p 的下一个与 newNode 的下一个相同
于 2013-04-25T01:47:14.530 回答