删除Java中链接List实现的方法

时间:2014-01-06 04:56:58

标签: java pointers methods linked-list

我从linkedList specified index的{​​{1}}删除元素的演讲中获得了这种方法。 我理解该方法是如何工作的,但我不明白为什么for-loop在所需索引之前留下current node pointer两个索引。

以下是方法:

public void remove(int index) {
        if (index == 0) {
            // removing the first element must be handled specially
            front = front.next;
        } else {
            // removing some element further down in the list;
            // traverse to the node before the one we want to remove
            ListNode current = front;
            for (int i = 0; i < index - 1; i++) {
                current = current.next;
            }

            // change its next pointer to skip past the offending node
            current.next = current.next.next;
        }
    }

for-loop来自0 to < index-1,而我认为它应该来自0 to < index。这样,指针位于需要删除的index之前的index。但是,上述方法工作正常。

例如: 在下面的LinkedList enter image description here

让我们考虑删除Node C。通过上述循环结构,current pointer将指向Node Acurrent.next将指向Node Bcurrent.next.next将为Node C。执行current.next=current.next.next将导致Node B删除,而不是Node C

我认为我的理解有问题,有人可以解释一下吗?

1 个答案:

答案 0 :(得分:1)

  

for循环从0变为&lt;索引-1

在您的示例中,删除C表示索引为2。因此i仅转到0,因为1不是< 1

currentA开始,for循环开始,current转到B

currentB,因此current.next.nextD,有效删除C