在C语言中,要以正确的顺序打印链表,可以使用递归或迭代的方式来实现。以下是两种常见的方法:
方法一:递归法 递归法是一种简洁的方法,可以通过递归函数来实现链表的逆序打印。
#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;
}
方法二:迭代法 迭代法是通过辅助栈来实现链表的逆序打印。
#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产品介绍。
领取专属 10元无门槛券
手把手带您无忧上云