我从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
让我们考虑删除Node C
。通过上述循环结构,current pointer
将指向Node A
,current.next
将指向Node B
。 current.next.next
将为Node C
。执行current.next=current.next.next
将导致Node B
删除,而不是Node C
。
我认为我的理解有问题,有人可以解释一下吗?
答案 0 :(得分:1)
for循环从0变为&lt;索引-1
在您的示例中,删除C
表示索引为2
。因此i
仅转到0
,因为1
不是< 1
。
current
从A
开始,for
循环开始,current
转到B
。
current
为B
,因此current.next.next
为D
,有效删除C
。