🕺作者: 主页
我的专栏 C语言从0到1 探秘C++ 数据结构从0到1 探秘Linux 算法题上机准备 😘欢迎 ❤️关注 👍点赞 🙌收藏 ✍️留言
题目
设L为带头结点的单链表,编写算法实现从尾到头反向输出每个结点的值。
算法思路
有递归和非递归两种方式,递归可以利用函数的堆栈,非递归可以使用数组存储倒置输出或者使用栈存储输出
题解
//递归
void inverPrintList(LinkedList L) {
LNode* p = L->next;
//从第一个首节点开始
if (p == NULL) {
//终止条件
return;
}
inverPrintList(p);
//递归
printf("%d->", p->data);
}
//非递归
void inverPrintList2(LinkedList L) {
//申请动态数组用来保存链表中的元素值
ElemType* set = (ElemType*)malloc(sizeof(ElemType) * L->data);
int i = 0;
LNode* p = L->next;
while (p) {
set[i++] = p->data;
p = p->next;
}
for (int j = i - 1; j >= 0; j--) {
printf("%d->", set[j]);
}
printf("\n");
}