因为只要求逆序输出,考虑采用递归思想,以减少对链表结构的破坏。
这里主要训练递归算法的编码技巧。
首先,这里递归的单位应该是每个链表元素,对这个元素的核心处理操作是打印其数据项,因为是倒序输出,所以将递归处理操作放在核心处理操作之前。
递归结束的条件是,当前节点为空节点,这个时候不做任何处理,前面的递归函数开始依次出栈,因为第一个出栈的是链表尾元素,所以后续的数据输出也是逆序的。
核心代码很简单:
int linkList_output_fromTail(struct node* head)
{
if(head != NULL) // key point 1 :递归结束,函数出栈条件
{
linkList_output_fromTail(head->next); // key point 3 : 递归操作与核心处理操作的顺序,递归的参数,要考虑好,
printf("%d ",head->data); // key point 2 :核心处理
}
// key point 4 : 没有其他通用处理部分
}