public void deleteAfter(Node prev){
prev.setNext(prev.next().next());
}
此方法删除给定prev节点之后的新节点。有人可以向我解释这段代码的具体步骤,以及我如何更改它,以便如果prev是列表中的最后一个节点,它将不会出错。
@param prev - 插入位置之前的节点。
答案 0 :(得分:6)
prev.next().next()
获取下一个节点之后的节点(来自给定节点)。然后将其传递给prev.setNext
方法,使其成为 next 节点。这基本上会删除prev
和下一个节点之间的节点。
基本上,它需要prev -> next_1 -> next_2 ...
并将其转换为prev -> next_2 ...
如果prev
是列表中的最后一个节点,那么next()
应该返回null
(我假设)。如果是这种情况,您可以进行空检查以避免错误。
public void deleteAfter(Node prev){
if(prev.next() != null) {
prev.setNext(prev.next().next());
}
}
答案 1 :(得分:1)
代码设置了一个新的next
,如果你有a -> b -> c
,那么现在你将拥有a -> c
。
为避免错误,您可以检查next是否返回null,或者如果Node上存在这样的方法,则可以调用hasNext
。
if(prev.next() != null){
...
}
答案 2 :(得分:1)
取消链接要删除的节点之前的节点之间的链接,然后将要删除的节点之前的节点链接到要删除的节点之后的节点。
答案 3 :(得分:0)
你有一些Node,在列表中的某个地方。我突出了它。
... - node - node - (prev) - node - node - ...
第一个电话,是设置"上一个"的下一个链接prev.setNext(...)
,但接下来要设置的是什么?它将设置为" next next"或(盯着上)
... - node - node - (prev) - node - node - ...
prev.next()将是
... - node - node - prev - (node) - node - ...
prev.next()。next()将是
... - node - node - prev - node - (node) - ...
因此,在设置操作之后,您的安排看起来像
... - node - node - prev node--node - ...
\------/
请注意,上一个新的"下一个节点"以前是下一个节点。
答案 4 :(得分:0)
如果您曾经问过自己"这段代码是做什么的?",很有可能以更具描述性的方式编写代码。例如:
public void deleteNodeAfter(Node index) {
// Borrowed from Bill the Lizard's answer
if (index.next() != null) {
index.setNext(index.next().next());
}
}
直接回答您:此代码从链接列表中删除节点。