C++语言程序设计

在创建链表之前，先要定义一个结构类型作为链表的结点类型。函数BuildOneTwoThree()创建链表的过程是：首先定义三个指向结点的指针head、second、third，并赋初值为NULL。然后，开辟三个结点的存储空间，每一个指针指向各存储空间的首地址。接下来，给每一个结点的数据域和指针域赋值，使得head结点的指针next指向second结点，second结点指向third结点，third结点的指针next赋值为NULL。最后返回头结点head。这样就得到了三个连在一起的结点head、second、third组成的链表。
函数"Push(node **headRef,int data)"实现了向已有链表中添加结点的功能。首先定义一个指向结点的指针，并分配一个结点的存储空间。然后对新结点赋值，使其指针域指向原链表的表头结点，并且以新的结点作为新的表头。该函数实际上是向表头添加结点的办法实现链表结点的插入，然后在主函数中调用该函数就可以创建链表了。 接下来，书中给出了函数"Push(node *&headRef,int data)"的定义和用该函数实现链表创建的方法，它是用对结点指针的引用作为参数的。如果直接用指针作参数，不能将修改后的指针值带回到调用函数。
最后，给出了一个从链表尾插入结点的方法，创建链表的函数。具体做法是：首先建立一个头结点head，然后每次以当前结点的指针域为参数，创建并加入下一个结点，其结果就是每次在链表尾加入一个新的结点，并让该结点的指针域为NULL。

| 例8-12

void main()
{
node* head = NULL;
node* tail;
int i;
Push(&head, 1);//创建头结点
tail = head; //使tail和head指向同一个结点

for (i=2; i<6; i++) {
Push(&(tail->next), i); // 在tail->next增加结点
tail = tail->next; // advance tail to point to last node，
//tail指向当前结点的下一个结点,实际为NULL
}
// 链表head为{1, 2, 3, 4, 5}
}