C++语言程序设计

由于链表具有的特殊结构，我们在对链表中的结点进行访问和查找的时候，必须从链表的头结点开始，按照链表结点指针域所指的顺序逐个查找结点，直到找到为止。
首先，我们来看看计算链表结点个数的函数Length()是如何实现的：
int Length(node* head) //以指向链表头结点的指针作为参数
{
node* current = head; //定义一个结点指针，并使之指向链表头结点
int count = 0; //计数器变量，初值为0
while (current != NULL) { //如果未到链表尾，继续循环
count++; //计数器加1
current = current->next; //指针current指向下一个结点
}
return count; //返回计数值，即链表长度
}
该函数就利用了链表结点的特点，即各结点通过指针依次链接起来，从头结点开始，使一个结点的指针依次指向下一个结点，同时计数器加1。这样，就实现了对链表结点个数的统计。Length( )函数对链表结点依次访问的过程，实际上就是对链表的一次遍历，得到所需要的信息。针对链表的这种访问方式，可以打个简单的比方：比如有一队小朋友手拉手站着，现在我们要对小朋友的人数进行统计。首先设定人数值为0，这时，我们只需要找出站在队首的小朋友，通过他们互相拉着的手找到下一个小朋友，同时每找到下一个小朋友就对计数器加1，直到找到最后一个小朋友为止，也就得到了该队小朋友的总人数。
为了对链表的一个结点数据进行修改或者需要读取某个结点的一些数据，就要用到链表的查找。我们可以参考链表遍历的方法，对链表的结点逐个访问，判断该结点的数据是否是我们要找的数据值。若是，则查找成功，返回指向该结点的指针；若不是，则继续判断下一个结点，直到到达链表尾为止。若查找失败，则返回NULL：
node* Find(node* head，int data) //以链表头指针和待插数据为参数
{
node* current = head; //定义指针变量，指向头指针
while (current!=NULL) //如果没有到达链表尾，则继续查找
if(current->data == data) break;
//如果该结点数据等于待查数据，则查找成功，跳出循环
else current = current->next; //否则继续指向下一个结点
return current; //返回当前指针
}