-节点的定义
使用结构体定义一个节点,数据成员有数据域,指针域
- 数据域 - 用于维护当前节点的数据
- 指针域 - 用于指向下一个节点的地址
struct LinkNode
{
int data;//数据域
struct LinkNode *next;//
};
-节点的创建
初始化并在栈区为节点分配空间
struct LinkNode node1 = {1,NULL};
struct LinkNode node2 = {2,NULL};
struct LinkNode node3 = {3,NULL};
struct LinkNode node4 = {4,NULL};
-节点之间建立关系,形成链表
node1.next = &node2;//node1节点指向node2节点
node2.next = &node3;//node2节点指向node3节点
node3.next = &node4;//node3节点指向node4节点
-链表的遍历
为了更好遍历链表中的所有节点,这里再定义一个新的节点用于指向第一个节点
struct LinkNode *pCurrent = &node1;//定义一个pCurrent指针指向链表的第一个节点
while(pCurrent != NULL)
{
printf("%d\n",pCurrent->data);//输出当前节点的数据域
pCurrent = PCurrent->next;//指向下一个节点
}
2.动态链表的创建
-节点的定义
使用结构体定义一个节点,数据成员有数据域,指针域
- 数据域 - 用于维护当前节点的数据
- 指针域 - 用于指向下一个节点的地址
struct LinkNode
{
int data;//数据域,用于维护当前节点的数据
struct LinkNode *next;//指针域,指向下一个节点
};
-节点的创建
使用malloc函数在堆区上为节点分配内存空间
struct LinkNode *node1 = malloc(sizeof(struct LinkNode));
struct LinkNode *node2 = malloc(sizeof(struct LinkNode));
struct LinkNode *node3 = malloc(sizeof(struct LinkNode));
struct LinkNode *node4 = malloc(sizeof(struct LinkNode));
给节点的数据域赋值
node1->data = 1;
node2->data = 2;
node3->data = 3;
node4->data = 4;
-节点之间建立关系,形成链表
node4为最后一个节点,指向NULL
node1->next = node2;
node2->next = node3;
node3->next = node4;
node4->next = NULL;
-链表的遍历
为了更好遍历链表中的所有节点,这里再定义一个新的节点用于指向第一个节点
struct LinkNode *pCurrent = node1;//定义一个pCurrent指针指向链表的第一个节点
while(pCurrent != NULL)
{
printf("%d\n",pCurrent->data);//输出当前节点的数据域
pCurrent = PCurrent->next;//指向下一个节点
}
-链表的删除
由于该链表的节点是在堆区上分配内存,因此需使用free函数将链表中所有节点的内存空间释放掉才能完成对链表的删除。
free(node1);
free(node2);
free(node3);
free(node4);
为了避免野指针的出现,这里对节点进行赋值NULL
node1 = NULL;
node2 = NULL;
node3 = NULL;
node4 = NULL;
此外,链表的创建可分为带头节点和不带头节点两种,可参考这篇笔记带头节点的链表初始化及遍历
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)