构建循环链表

建立循环链表并不像名字听起来那么难。到目前为止,我们已经看到在末尾添加一个新节点非常简单;我们将最后一个节点的下一个引用设置为 NULL。在循环链表中,最后一个节点的下一个引用实际上指向第一个节点,从而创建了一个循环链表。让我们编写一个简单的循环链接表,在列表末尾插入节点:

Unresolved include directive in modules/ROOT/pages/ch03/ch3-06.adoc - include::example$Chapter03/2.php[]

如果我们仔细观察前面的代码,就会发现它与我们的单链表实现方式如出一辙。唯一不同的是,我们没有检查列表的末尾,而不是确保当前节点与第一个节点不相同。此外,在下面一行中,我们将新创建节点的下一个引用赋值给列表的第一个节点:

$newNode->next = $this->_firstNode;

在我们执行此操作时,新节点会被添加到列表的后面。我们需要做的就是将新节点的下一个引用设置为列表中的第一个节点。这样,我们实际上就创建了一个循环链接列表。我们必须确保不会陷入无限循环。这就是我们将 $currentNode->next$this->_firstNode 进行比较的原因。同样的原则也适用于显示循环链接列表中的所有元素。我们需要确保在显示标题时不会陷入无限循环。以下代码将显示循环链接列表中的所有标题:

Unresolved include directive in modules/ROOT/pages/ch03/ch3-06.adoc - include::example$Chapter03/2.php[]

到目前为止,我们已经建立了一个单链表,并实现了一个循环链表。现在,我们将用 PHP 实现一个双链表。