SplDoublyLinkedList - 如何获取当前节点周围的节点

时间:2018-01-11 19:43:18

标签: php doubly-linked-list spl

对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)

谢谢!

1 个答案:

答案 0 :(得分:1)

自己跟踪上一个和下一个值,如果你修改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;
}

Demo