可以通过递归或非递归实现从尾到头打印链表。
非递归采用栈来实现,因为栈是“先进后出”,每遍历一个节点的时候,把该节点压入栈中,当遍历完整个链表后,再从栈顶逐个输出节点的值,即出栈。这样输出的节点的顺序已经反过来了。
void PrintfTailToHead()
{
stack<ListNode<T>* > nodes;
ListNode<T>* head = _head;
//遍历每一个节点 入栈
while (head != NULL)
{
nodes.push(head);
head = head->_next;
}
//从栈顶输出每个节点的值 出栈
while (!nodes.empty())
{
head = nodes.top();//获取栈顶元素
cout << head->_data << " ";
nodes.pop();
}
cout << endl;
}
递归:先递归输出后面的节点,再输出该节点本身
void PrintfTailToHead_R()
{
_PrintfTailToHead(_head);
cout << endl;
}
void _PrintfTailToHead(ListNode<T>* head)
{
if (head != NULL)
{
if (head->_next)
{
_PrintfTailToHead(head->_next);
}
cout << head->_data << " ";
}
}
完