请参阅以下与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.
请让我知道以不同顺序编写这两个陈述的区别是什么?
由于
答案 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.link
,p.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 |
+---+ +---+ +---+ +---+
解释