回复 3楼 Garfeild
声明:下面的回答,仅针对初学链表的朋友,且仅限于纯C环境。若有不周之处,请指正。
你问的问题其实是处理链表时,两种不同的方案,而且这两种方案通常不会同时使用。
1、带头结点的链表
2、不带头结点的链表
带头结点的链表可以这样看:
A -> a1 -> a2 -> ... -> an
其中,A是整个链表中的第一个节点,而且永远是第一个节点。“永远”的意思是:不能再A的前面增加新节点(因为,链表支持动态增加节点)。所以,实质上,上面的链表中,真正有意义(存放要处理的数据)的节点,应该从第二个节点开始,即:a1, a2, ..., an
2、不带头结点的链表可以这样看:
指针-----> a1 -> a2 -> ... -> an
其中,“->”体现在指针节点的“链域”,而“指针----->”中的指针,类型与a1等是不一样的,它是“能指向a1,a2等的节点的指针变量”,而不是结构体实例。该指针的内容就是&a1(链表中第一个节点的首地址)
(各位高手,可能你们会说a1等也是指针,是通过malloc()得到的。我这的意思是,在程序过程中,a1们好像是指针,但本质上是malloc()申请得到的内存空间,就是结构体的实例。这里我不用“变量”这个说法)
[
本帖最后由 犬虫门心 于 2011-2-21 14:17 编辑 ]