SplDoublyLinkedList - 如何获取当前节点周围的节点
SplDoublyLinkedList - how to fetch nodes surrounding current node
有一个关于 PHP 的 SplDoublyLinkedList 的问题。如果双向链表的本质是每个节点都有对左右节点的引用,为什么 SplDoublyLinkedList 不提供根据当前节点检索那些相邻节点的方法?
$q = new SplDoublyLinkedList;
$q->push('A');
$q->push('B');
$q->push('C');
for ($q->rewind(); $q->valid(); $q->next()) {
$current = $q->current();
// $prev = $q->prev();
// $next = $q->next();
}
在上面的示例中 prev()
和 next()
移动迭代光标。有没有办法知道 $current
之前和之后的内容而不求助于 $q->key()
和 $q->offsetGet($pos)
?
谢谢!
自己跟踪上一个和下一个值,如果您将 for 循环修改为使用 while 循环,则更容易:
$prev = null;
$q->rewind();
while ($q->valid()) {
$current = $q->current();
echo 'PREV: ', $prev, PHP_EOL;
echo 'CURRENT: ', $current, PHP_EOL;
$prev = $current;
$q->next();
$next = $q->current();
echo 'NEXT: ', $next, PHP_EOL;
echo PHP_EOL;
}
有一个关于 PHP 的 SplDoublyLinkedList 的问题。如果双向链表的本质是每个节点都有对左右节点的引用,为什么 SplDoublyLinkedList 不提供根据当前节点检索那些相邻节点的方法?
$q = new SplDoublyLinkedList;
$q->push('A');
$q->push('B');
$q->push('C');
for ($q->rewind(); $q->valid(); $q->next()) {
$current = $q->current();
// $prev = $q->prev();
// $next = $q->next();
}
在上面的示例中 prev()
和 next()
移动迭代光标。有没有办法知道 $current
之前和之后的内容而不求助于 $q->key()
和 $q->offsetGet($pos)
?
谢谢!
自己跟踪上一个和下一个值,如果您将 for 循环修改为使用 while 循环,则更容易:
$prev = null;
$q->rewind();
while ($q->valid()) {
$current = $q->current();
echo 'PREV: ', $prev, PHP_EOL;
echo 'CURRENT: ', $current, PHP_EOL;
$prev = $current;
$q->next();
$next = $q->current();
echo 'NEXT: ', $next, PHP_EOL;
echo PHP_EOL;
}