2025-03-19 学习记录--C/C++-C语言-单链表的遍历输出

C语言-单链表的遍历输出

题目】遍历输出一个单链表L中各结点的元素值(假设元素数据类型为int

为了实现单链表的遍历输出,我们需要完成以下步骤:👇🏻

  1. 创建一个单链表。
  2. 在链表中插入一些数据。
  3. 调用 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 函数遍历链表并输出数据。
  • 最后释放链表占用的内存,确保程序没有内存泄漏。

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小呀小萝卜儿

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值