SplDoublyLinkedList — как получить узлы, окружающие текущий узел

Есть вопрос о 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)?

Спасибо!

0

Решение

Следите за предыдущими и последующими значениями самостоятельно, проще, если вы измените цикл 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;
}

демонстрация

1

Другие решения

Есть вопрос о 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)?

Спасибо!

0

Следите за предыдущими и последующими значениями самостоятельно, проще, если вы измените цикл 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;
}

демонстрация

active «data-shortcut =» A
самый старый «data-shortcut =» O
голосует «data-shortcut =» V
1
По вопросам рекламы [email protected]