由于单链表只能从按单个方向访问下一个节点,而不能访问前一个节点。
首先,解决这个问题肯定要遍历链表。遍历的顺序是从头到尾的顺序,可输出的顺序却是从尾到头。也就是说第一个遍历到的结点最后一个输出,而最后一个遍历到得结点第一个输出。这就是典型的“后进先出”,可以用栈实现这种顺序。
实现程序过程: 每经过一个结点的时候,把该结点放到一个栈中。当遍历完整个链表后,再从栈顶开始逐个输出结点的值,此时输出的结点的顺序已经反转过来了。
头文件:Node.h
#include<stdio.h>
typedef int DataType;
typedef struct strNode
{
struct strNode* pNext;
DataType data;
}Node;
typedef struct strNode* PNode;
函数实现:
<pre name="code" class="objc">#include"Node.h"
void PrintListFormTailToHead(PNode pHead)
{
if (pHead == NULL)
{
return;
}
else
{
PrintListFormTailToHead(pHead->pNext);
printf("%d", pHead->data);
}
}