有人可以解释一下LinkedList中方法节点(int index)的逻辑。是什么让位偏移1:
(index < (size >> 1))
方法:
Node<E> node(int index) {
if `(index < (size >> 1)) {
Node<E> x = first;
for (int i = 0; i < index; i++)
x = x.next;
return x;
} else {
Node<E> x = last;
for (int i = size - 1; i > index; i--)
x = x.prev;
return x;
}
}
感谢您的回答!
答案 0 :(得分:1)
size >> 1
相当于size / 2
我想这个函数在索引node
找到x
。
基本上,它的作用是将index
与节点总数进行比较。
如果index < size/2
则会从0
搜索到size/2
如果index > size/2
则会从size
搜索到size/2
例如,如果您不将index
与size/2
进行比较,则可能会对整个列表进行循环,即O(n)
。通过这样做,您可以将迭代减少一半。 (O(n/2)
)