递归的本质是一个栈结构(从尾到头打印链表)

题目:输入链表头,从尾到头打印该单向链表

 

思路:

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); } }

注意:递归调用如果深度太深,会占用很多栈中的空间资源(函数每次递归调用保存现场,以及局部变量存放在栈中)。

 

posted @ 2020-06-08 16:45  LvCS  阅读(369)  评论(0)    收藏  举报