什么叫空的单链表?就是我有一个头结点,他的指针域为空,后面什么元素也没有,他就是一个空表,但头结点已经有了
Linklist这种类型是是指向两个成员的结点的指针*
L一开始没有,分配好空间后才有值,获得的值仍然通过L来获得,所以L用引用型变量。
第一步先从内存中找到这么一块空间
两种办法
1直接new一个结点,这个new的结果是指向这个结点的指针,所以把这个新结点的地址直接赋值给L
2也可以用C语法,这块空间有多大呢?用malloc分配出来,然后转换成(Linklist)这种类型,就是指向一个结点的指针
即,本来是一块空间,经过这个运算就变成了这块空间的地址,然后把这块空间的地址赋值给L
L就指向这个空的结点。
然后给next域置空,
操作结束
就是从内存中找到头结点,然后用指针变量L指向它,然后给这个结点的指针域置空。
接下来补充几个简单的算法
1.判断是不是空链表,只需要判断指针域是不是空就行
2,销毁单链表
从头指针开始,把包括头结点的所有结点都释放
一个变量要想指向某个空间,只需把空间的地址赋给他就行
头结点的地址在头指针里存着,而L就是存储这个结点的地址,直接将L的值赋值给p就行,然后指针p就指向头结点。
。
若直接删的话,L的地址也没了,就找不到下个节点在哪里了,所以要先将L往后移一下,然他来存储下一个结点的地址
而L是指向头结点的形式,这个a1的地址在哪存着呢?在头结点next的地址域里存着
就是L所指的这个结点的next域重新赋值给L,L就只向下一个结点,这是最关键的操作:怎么让指针指向下一个结点。因为Next域里的值是下一结点的地址。
然后接可以free (p)了,这是c语言的语法,这个要对应前面的malloc,要是用delete p,前面就要用new
接下来的操作一样,反复进行p =L;L =L->next;
怎么结束呢?p或L等于空。L非空也可以直接用L表示
把空赋值给L;最后空等于p;
算法如下:
p指向当前要销毁的结点,销毁是一个反复动作,所以需要一个循环,条件为L非空