双向链表的使用

<?php
$list = new SplDoublyLinkedList(); // 创建双向链表对象

// 尾部插入
$list->push('张三');
$list->push('李四');
$list->push('王五');

// 头部插入
$list->unshift('陈二');
$list->unshift('刘一');

if ($list->isEmpty()) {
    echo '双向链表为空' . PHP_EOL;
} else {
    $count = $list->count();
    echo "双向链表有{$count}个节点" . PHP_EOL; // 双向链表有5个节点
}

// 遍历所有节点
$list->setIteratorMode(SplDoublyLinkedList::IT_MODE_FIFO);
for ($list->rewind(); $list->valid(); $list->next()) {
    // $list->rewind()   指针移到头节点
    // $list->valid()    检查当前指针后继是否还包含更多节点
    // $list->current()  获取当前节点数据
    // $list->next()     指针移到下一个节点
    echo $list->current() . ' ';
}
// 刘一 陈二 张三 李四 王五

// 由于上面遍历所有节点,指针已经移到了链表结尾,故指针后继已经没有节点了
echo PHP_EOL;
echo var_export($list->valid(), true) . PHP_EOL;   // false
echo var_export($list->current(), true) . PHP_EOL; // NULL

Copyright © 2024 码农人生. All Rights Reserved