background image

test *create() {

return head;//

 

返回链首指针 }

void showl(test *head) { coutnext; } }

void main() { showl(create()); cin.get(); cin.get(); } 程序写到这里,基本形态已经出来,输入
和调用我们已经有了。

下面我们来解决输入问题,链表的实现我们是通过循环输入来实现的,既然是循环我们

 

就一定得考虑终止循环的条件, 避免死循环和无效循环的发生。

在 create()函数内部我们先写成这样:

test *create() { test *ls;//

 

节点指针 test *le;//

 

链尾指针 ls = new test;//把 ls 指向动态开辟的堆内

 

存地址 cin>>ls->name>>ls->socre; head=NULL;//进入的时候先不设置 head 指针指向任何地
址,因为不知道是否一上来就输入 null

 

跳出程序 le=ls;//把链尾指针设置成刚刚动态开辟的

堆内存地址,用于等下设置 le->next,也就是下一个节点的位置

le->next=NULL;//把链尾指针的 next 设置为空,因为不管如何循环总是要结束的,设置为空

 

 

才能够在循环显链表的时候不 至于死循环 delete ls;//当结束的时候最后一个动态开辟的
内存是无效的,

 

所以必须清除掉 return head;//

 

返回链首指针 } 在循环创建之前我们必须考

虑一个都不输入的情况。

程序一单进入 create 函数我们首先必然要创建一个节点,我们先创建一个节点指针,后

 

把者个节点指针指向到动态开辟 的 test 类型的动态内存地址位置上。

test *ls; ls = new test; 程序既然是循环输入,而结构成员 test *next 又是用来存储下一个接

 

点的内存地址的,每次循环我们又要动态创建一个 新的内存空间,所以我们必须要有一
个指针来存储上一次循环动态开辟的内存地址,于是就有了

test *le; 接下来在进入循环前我们要创建链表的第一个节点,第一个节点必然是在循环外
创建,于是就有了

cin>>ls->name>>ls->socre; 程序执行者的情况是位置的,所以我们必然要考虑,一上来就
不想继续运行程序的情况,所以我们一开始先把 head

 

引导 指针设置为不指向任何地址也

就是

head=NULL;

为了符合 le 也就是链尾指针的设计思路,我们在循环前一定要保存刚刚动态开辟的内存

 

地址,好在下一次循环的时候设 置上一个节点中的 next 成员指向,于是我们便有了: