Есть вопрос о SplDoublyLinkedList в PHP. Если природа двусвязных списков заключается в том, что каждый узел имеет ссылку на узлы как слева, так и справа, почему 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;
}
Есть вопрос о SplDoublyLinkedList в PHP. Если природа двусвязных списков заключается в том, что каждый узел имеет ссылку на узлы как слева, так и справа, почему 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;
}