一、题目描述
输入一个链表的头结点,从尾到头反过来打印出每个结点的值
二、解题思路
【思路一---从头到尾入栈输出】
借助栈的数据结构
【思路二---递归即栈,用递归】
递归本质上是一个栈结构,所以可考虑递归
三、解题算法
方法1、借助栈
/************************************************
author:tmw
date:2018-6-27
*************************************************/
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
typedef struct ListNode
{
int data;
struct ListNode* next;
}ListNode;
/**方法一:借助栈数据结构**/
#define MAXSIZE 100
void printList_end2begin(ListNode* head)
{
/**构建栈**/
int* stack = (int*)malloc(MAXSIZE*sizeof(int));
int top = 0;
ListNode* p;
p = head;
/**从头到尾依次入栈**/
while( p != NULL )
{
stack[top++] = p->data;
p = p->next;
}
top--;
/**出栈打印**/
while(top>=0)
{
printf("%d ",stack[top]);
top--;
}
}
方法2、递归
/**方法二:递归**/
void dfs_printList_end2begin(ListNode* head)
{
if( head != NULL )
{
if( head->next != NULL )
dfs_printList_end2begin(head->next);
printf("%d ",head->data);
}
}