在链接列表中插入节点:语句的顺序是否重要?

时间:2013-04-25 01:36:11

标签: java data-structures linked-list

请参阅以下与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.

请让我知道以不同顺序编写这两个陈述的区别是什么?

由于

3 个答案:

答案 0 :(得分: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设置为旧p.linkp.link设置为newNode

答案 1 :(得分:2)

PDF是正确的。

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

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

答案 2 :(得分:0)

假设:

这是你的新节点:

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

这是你的p:

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

p.link = newNode;

+---+    +---+
| 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的下一个相同