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 成员指向,于是我们便有了: