C
语言-单链表的遍历输出
【题目】遍历输出一个单链表
L
中各结点的元素值(假设元素数据类型为int
)
为了实现单链表的遍历输出,我们需要完成以下步骤:👇🏻
- 创建一个单链表。
- 在链表中插入一些数据。
- 调用
listVisit
函数遍历并输出链表中的数据。
#include <stdio.h> // 引入标准输入输出库,用于使用 printf 等函数
#include <stdlib.h> // 引入标准库,用于使用 malloc 和 free 等函数
// 定义一个结构体
typedef struct LNode {
int data; // 结点的数据域,存储整型数据
struct LNode *next; // 结点的指针域,指向下一个结点
} LNode, *LinkList; // LNode 是结点类型,LinkList 是指向 LNode 的指针类型
// 单链表的遍历输出
void listVisit(LinkList L) {
LNode *p = L->next; // 初始化指针 p,指向链表的第一个节点(头节点的下一个节点)
while (p != NULL) { // 遍历链表,直到链表结束
printf("%d ", p->data); // 输出当前节点的数据
p = p->next; // 移动到下一个节点
}
printf("\n"); // 输出换行符
}
// 创建一个新节点
LNode* createNode(int data) {
LNode *newNode = (LNode *)malloc(sizeof(LNode)); // 动态分配内存,创建一个新节点
newNode->data = data; // 设置新节点的数据域
newNode->next = NULL; // 初始化新节点的指针域为 NULL
return newNode; // 返回新节点的指针
}
// 在链表尾部插入节点
void insertAtTail(LinkList L, int data) {
LNode *newNode = createNode(data); // 创建一个新节点
LNode *p = L; // 初始化指针 p,指向链表的头节点
while (p->next != NULL) { // 找到链表的最后一个节点
p = p->next;
}
p->next = newNode; // 将新节点插入到链表尾部
}
int main() {
// 创建头节点(不存储数据)
LinkList head = (LinkList)malloc(sizeof(LNode)); // 动态分配内存,创建头节点
head->next = NULL; // 初始化头节点的 next 指针为 NULL
// 插入一些数据到链表中
insertAtTail(head, 10); // 在链表尾部插入数据 10
insertAtTail(head, 20); // 在链表尾部插入数据 20
insertAtTail(head, 30); // 在链表尾部插入数据 30
insertAtTail(head, 40); // 在链表尾部插入数据 40
insertAtTail(head, 50); // 在链表尾部插入数据 50
// 遍历并输出链表
printf("链表中的元素:"); // 打印提示信息
listVisit(head); // 调用 listVisit 函数遍历并输出链表
// 释放链表内存
LNode *p = head; // 初始化指针 p,指向链表的头节点
while (p != NULL) { // 遍历链表,释放每个节点的内存
LNode *temp = p; // 临时指针 temp 指向当前节点
p = p->next; // 移动指针 p 到下一个节点
free(temp); // 释放当前节点的内存
}
return 0; // 程序正常结束
}
链表中的元素:10 20 30 40 50
代码说明 🍭
- 1、结构体定义:
LNode
是链表的节点结构体,包含一个整型数据data
和一个指向下一个节点的指针next
。LinkList
是指向LNode
的指针类型,通常用于表示链表的头指针。- 2、
listVisit
函数:
- 用于遍历链表并输出每个节点的数据。
- 从头节点的下一个节点开始遍历,直到遇到
NULL
结束。- 3、
createNode
函数:
- 用于创建一个新节点,并初始化节点的数据和
next
指针。- 4、
insertAtTail
函数:
- 用于在链表的尾部插入一个新节点。
- 遍历链表找到最后一个节点,然后将新节点插入到尾部。
- 5、
main
函数:
- 创建链表的头节点。
- 调用
insertAtTail
函数插入一些数据。- 调用
listVisit
函数遍历并输出链表中的数据。- 释放链表占用的内存,避免内存泄漏。
总结 🍭
- 代码实现了单链表的创建、插入和遍历输出。
- 通过动态内存分配创建节点,并在链表尾部插入数据。
- 使用
listVisit
函数遍历链表并输出数据。- 最后释放链表占用的内存,确保程序没有内存泄漏。