首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

在C中以正确的顺序打印链表

在C语言中,要以正确的顺序打印链表,可以使用递归或迭代的方式来实现。以下是两种常见的方法:

方法一:递归法 递归法是一种简洁的方法,可以通过递归函数来实现链表的逆序打印。

代码语言:txt
复制
#include <stdio.h>
#include <stdlib.h>

// 定义链表节点结构体
struct ListNode {
    int val;
    struct ListNode* next;
};

// 递归函数
void printListReverse(struct ListNode* head) {
    if (head == NULL) {
        return;
    }
    printListReverse(head->next);
    printf("%d ", head->val);
}

// 测试样例
int main() {
    // 创建链表
    struct ListNode* head = (struct ListNode*)malloc(sizeof(struct ListNode));
    head->val = 1;
    head->next = (struct ListNode*)malloc(sizeof(struct ListNode));
    head->next->val = 2;
    head->next->next = (struct ListNode*)malloc(sizeof(struct ListNode));
    head->next->next->val = 3;
    head->next->next->next = NULL;

    // 逆序打印链表
    printListReverse(head);

    // 释放链表内存
    free(head->next->next);
    free(head->next);
    free(head);

    return 0;
}

方法二:迭代法 迭代法是通过辅助栈来实现链表的逆序打印。

代码语言:txt
复制
#include <stdio.h>
#include <stdlib.h>

// 定义链表节点结构体
struct ListNode {
    int val;
    struct ListNode* next;
};

// 迭代函数
void printListReverse(struct ListNode* head) {
    struct ListNode* stack[1000];  // 定义辅助栈
    int top = -1;

    // 将链表节点依次入栈
    while (head != NULL) {
        stack[++top] = head;
        head = head->next;
    }

    // 出栈并打印节点值
    while (top >= 0) {
        printf("%d ", stack[top--]->val);
    }
}

// 测试样例
int main() {
    // 创建链表
    struct ListNode* head = (struct ListNode*)malloc(sizeof(struct ListNode));
    head->val = 1;
    head->next = (struct ListNode*)malloc(sizeof(struct ListNode));
    head->next->val = 2;
    head->next->next = (struct ListNode*)malloc(sizeof(struct ListNode));
    head->next->next->val = 3;
    head->next->next->next = NULL;

    // 逆序打印链表
    printListReverse(head);

    // 释放链表内存
    free(head->next->next);
    free(head->next);
    free(head);

    return 0;
}

以上是两种在C语言中以正确的顺序打印链表的方法。这些方法可以应用于各种链表相关的问题,例如链表的反转、链表的合并等。如果你想了解更多关于链表的知识,可以参考腾讯云的云原生数据库TDSQL产品,它提供了高性能、高可用的分布式数据库服务,适用于各种场景的数据存储需求。详情请访问:腾讯云TDSQL产品介绍

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

  • 实验一 线性表的基本操作

    一、线性结构的顺序表基本操作 实验目的 1.学会定义单链表的结点类型、线性表的顺序存储类型,实现C程序的基本结构,对线性表的一些基本操作和具体的函数定义。 2.掌握顺序表的基本操作,实现顺序表的插入、删除、查找以及求并集等运算。 3.掌握对多函数程序的输入、编辑、调试和运行过程。 实验要求 1.预习C语言中结构体的定义与基本操作方法。 2.对顺序表的每个基本操作用单独的函数实现。 3.编写完整程序完成下面的实验内容并上机运行。 实验内容 1.编写程序实现顺序表的下列基本操作: (1)初始化顺序表La。 (2)将La置为空表。 (3)销毁La。 (4)在La中插入一个新的元素。 (5)删除La中的某一元素。 (6)在La中查找某元素,若找到,则返回它在La中第一次出现的位置,否则返回0。 (7)打印输出La中的元素值。 2.(选做)编写程序完成下面的操作: (1)构造两个顺序线性表La和Lb,其元素都按值非递减顺序排列。 (2)实现归并La和Lb得到新的顺序表Lc,Lc的元素也按值非递减顺序排列。 (3)假设两个顺序线性表La和Lb分别表示两个集合A和B,利用union_Sq操作实现A=A∪B。 二、单链表基本操作(选做) 实验目的 1. 学会定义单链表的结点类型、线性表的链式存储类型,实现对单链表的一些基本操作和具体的函数定义,了解并掌握单链表的类定义以及成员函数的定义与调用。 2. 掌握单链表基本操作及两个有序表归并、单链表逆置等操作的实现。 实验要求 1.预习C语言中结构体的定义与基本操作方法。 2.对单链表的每个基本操作用单独的函数实现。 3.编写完整程序完成下面的实验内容并上机运行。 实验内容 1.编写程序完成单链表的下列基本操作: (1)初始化单链表La。 (2)在La中插入一个新结点。 (3)删除La中的某一个结点。 (4)在La中查找某结点并返回其位置。 (5)打印输出La中的结点元素值。 2.构造一个单链表L,其头结点指针为head,编写程序实现将L逆置。(即最后一个结点变成第一个结点,原来倒数第二个结点变成第二个结点,如此等等。)

    02
    领券