方法一:
我们可以遍历链表,可是遍历链表的顺序是从头到尾,而打印(输出)链表的顺序是从尾到头。即第一个遍历到的结点最后一个输出,最后一个遍历到的结点第一个输出。这正号符合栈“先进后出”的思想,所以我们可以用栈来实现。每经过一个结点的时候,把结点放到栈中,当遍历完整个链表后,从栈顶开始逐个输出结点的值,这样就可以逆序打印出该链表了。
具体实现如下:
void List::ReversePrint2(ListNode* phead)
{
stack<ListNode*> s;
if (NULL == phead)
{
return ;
}
else
{
ListNode* pCur = phead;
while (pCur != NULL)
{
s.push(pCur);
pCur = pCur->_next;
}
while (!s.empty())
{
pCur = s.top();
cout << pCur->_value << "->";
s.pop();
}
}
}
方法二:
利用递归来实现,每访问到一个结点的时候,先递归输出它后面的结点,在输出该结点自身,这样也可以逆序打印出该链表。
具体实现:
void List::ReversePrint1(ListNode* phead)
{
if (phead!=NULL)
{
if (phead->_next != NULL)
{
ReversePrint1(phead->_next);
}
cout << phead->