*next除了这个指针,list_t
中可以包含其它类型的数据,包括结构体变量。比如:typedef
struct
{
struct
usr_struct
data
list_t
*next
}
list_t
先搞清楚基本概念,不懂再问
// 返回一个带头结点的且具有五个结点的链表link *initLink()
{
link * p=(link*)malloc(sizeof(link)) // 创建头结点
link * temp=p // 使用变量temp在下面创建结点时指向链表末端
for(int i=1 i<5 i++)
{
link *a=(link*)malloc(sizeof(link)) // 创建一个结点
a->elem=i // 为结点赋值
a->next=NULL // 指针域暂时赋为NULL,若后面还要创建结点的话再修改
temp->next=a // 因为temp指向链表末端,即最后一个结点
// 故该节点指针域应指向刚才创建的结点 a
temp=temp->next// 连接好以后,temp指向下一个结点(刚才创建的结点a,现在是链表末端)
}
return p // 返回头结点
}
简单说来,就是通过指针指向,把两个结构体连接起来。比如定义下面这个结构体struct node
{
int data
struct node *next
}
可以看到结构体里面定义了一个自身类型的指针,通过让指针指向另外一个结构体,我们就能通过结构体里面的next变量访问下个结构体里面的内容,而通过下一个结构体,同样可以通过下一个结构体的next指向,找到下一个这种类型的结构体,这样就形成了所谓的链表。