递归的本质是一个栈结构(从尾到头打印链表)
题目:输入链表头,从尾到头打印该单向链表
思路:
1、确定是否允许修改输入(是否允许将链表翻转),一般都是不允许修改输入的。
2、遍历链表找到链表尾,最后遍历到的反而先输出,最先遍历到的最后输出。考虑到栈结构。C语言中没有直接使用栈的函数。
3、递归在本质上是一个栈结构,可以使用递归
写法(C语言):
/*
* 链表格式
*/
typedef struct List{ int i_Key; struct List *pt_Next; }T_List, *PT_List;
/* 链表头 */ PT_List g_ptListHead;
/*
* 反向打印链表数据
* 输入:第一次调用时传入链表头
*/ void ShowList(PT_List pt_cur) { if (pt_cur != NULL) { if (pt_cur->pt_Next != NULL) {
/* 递归调用 */ ShowList(pt_cur->pt_Next); } printf("%d\n", pt_cur->i_Key); } }
注意:递归调用如果深度太深,会占用很多栈中的空间资源(函数每次递归调用保存现场,以及局部变量存放在栈中)。

浙公网安备 33010602011771号