这段代码具体用于什么?我怎么能改变它?

时间:2017-11-30 20:18:26

标签: java data-structures linked-list

public void deleteAfter(Node prev){
    prev.setNext(prev.next().next());
}

此方法删除给定prev节点之后的新节点。有人可以向我解释这段代码的具体步骤,以及我如何更改它,以便如果prev是列表中的最后一个节点,它将不会出错。

@param prev - 插入位置之前的节点。

5 个答案:

答案 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)

取消链接要删除的节点之前的节点之间的链接,然后将要删除的节点之前的节点链接到要删除的节点之后的节点。

np.einsum

答案 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());
    }
}

直接回答您:此代码从链接列表中删除节点。