题目:输入一个链表的头结点,从尾到头反过来打印每个节点的值。
链表节点的定义:
typedef struct LinkNode
{
int _value;
struct LinkNode* _next;
}LinkNode,*pLinkNode;
链表定义:
typedef struct LinkList
{
LinkNode* _phead;
}LinkList,*pLinkList;
算法一:对于一个单链表的打印通常是从头到尾依次遍历并进行打印,对于遍历的顺序而言是“先遍历后打印”,则:采用递归的方法,便可以实现从尾到头打印单链表。
//使用递归将单链表从尾到头打印
void Display_LinkList_EndToStart2(pLinkNode pNode)
{
if(pNode == NULL)
{cout<<"This LinkList is Empty!!!"<<endl;}
if(pNode != NULL)
{
if(pNode->_next != NULL)
Display_LinkList_EndToStart2(pNode->_next);
cout<<pNode->_value<<"->";
}
}
算法二:上面分析依据遍历的顺序与打印的是“先遍历后打印”,根据这一特性,可以借助栈来进行实现从尾到头打印单链表。
//借助栈使得单链表从尾到头输出
void Display_LinkList_EndStartTo1(pLinkList plink)
{
assert(plink);
if(plink->_phead == NULL)
{cout<<"This LinkList is Empty!!!"<<endl;}
stack<int> stack1;
pLinkNode cur = plink->_phead ;
while(cur != NULL)
{
stack1.push(cur->_value);
cur = cur->_next ;
}
while(stack1.empty() != true)
{
cout<<stack1.top()<<"->";
stack1.pop();
}
cout<<"NULL"<<endl;
}
作者水平有限,如有问题,请留言,谢谢!!!