SPL数据结构之双向链表SplDoublyLinkedList最先添加到链表中的节点叫做Bottom节点(底部),也叫Head节点,最后加入到链表中的节点叫做Top节点(头部),链表指针指向的节点叫做当前节点,链表指针是当前节点的一个标识,可以指向任意节点。任意一个节点都包含节点名称(key或offset)和节点数据(value)。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50
| <?php
$obj = new SplDoublyLinkedList();
$obj->push(1); $obj->push(2); $obj->push(3);
$obj->unshift(10); print_r($obj);
$obj->rewind();
echo 'Current:' . $obj->current() . "\r\n";
$obj->next(); echo 'Next node:' . $obj->current() . "\r\n";
$obj->prev(); echo 'Next node:' . $obj->current() . "\r\n"; $obj->next(); $obj->next(); $obj->next(); $obj->next(); echo 'Next node:' . $obj->current() . "\r\n";
if ($obj->current()) { echo "Current node valid\r\n"; } else { echo "Current node invalid\r\n"; }
if ($obj->valid()) { echo "valid list\r\n"; } else { echo "invalid list\r\n"; } $obj->rewind(); echo "Pop value:" . $obj->pop() . "\r\n"; print_r($obj); echo "Current node:" . $obj->current() . "\r\n"; $obj->next(); $obj->next();
$obj->pop(); echo 'next node:' . $obj->current() . "\r\n";
$obj->shift(); print_r($obj);
|
总结:
rewind使链表的当前指针指向链表的底部Bottom(头部)
push向链表的顶部Top(尾部)插入一个节点
pop获取链表中的顶部Top(尾部)节点,并且从链表中删除这个节点,该操作不改变指针的指向位置。
current指向链表当前节点的指针,必须在调用之前先调用rewind。当指向的节点被删除之后,将指向一个空节点。
next让链表当前节点的指针指向下一个节点,current的返回值随之改变。
unshift向链表的底部Bottom(头部)插入一个节点。
shift删除一个链表底部Bottom(头部)的节点。
bottom获取链表底部Bottom(头部)元素,当前指针位置不变。
top获取链表顶部Top(尾部)元素,当前指针位置不变。