输入一个链表的头结点,从尾到头反过来打印出每个节点的值
Posted wanglelelihuanhuan
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了输入一个链表的头结点,从尾到头反过来打印出每个节点的值相关的知识,希望对你有一定的参考价值。
可以通过递归或非递归实现从尾到头打印链表。
非递归采用栈来实现,因为栈是“先进后出”,每遍历一个节点的时候,把该节点压入栈中,当遍历完整个链表后,再从栈顶逐个输出节点的值,即出栈。这样输出的节点的顺序已经反过来了。
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 << " ";
完整代码如下:
#include<iostream>
#include<stack>
#include<assert.h>
using namespace std;
template<class T>
struct ListNode
int _data;
ListNode<T>* _next;
ListNode<T>(const T& data)
: _data(data)
, _next(NULL)
;
template<class T>
class List
public:
List()
:_head(NULL)
List(const T& list)
:_head(NULL)
~List()
void PushBack(const T& x)
if (_head == NULL)
_head = new ListNode<T>(x);
else
ListNode<T>* head = _head;
while (head->_next)
head = head->_next;
head->_next = new ListNode<T>(x);
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;
public:
void Printf()
if (_head == NULL)
return;
while (_head)
cout << _head->_data << " ";
_head = _head->_next;
cout << endl;
void _PrintfTailToHead(ListNode<T>* head)
if (head != NULL)
if (head->_next)
_PrintfTailToHead(head->_next);
cout << head->_data << " ";
private:
ListNode<T>* _head;
;
int main()
List<int> list;
list.PushBack(1);
list.PushBack(2);
list.PushBack(3);
list.PrintfTailToHead_R();
list.PrintfTailToHead();
list.Printf();
return 0;
以上是关于输入一个链表的头结点,从尾到头反过来打印出每个节点的值的主要内容,如果未能解决你的问题,请参考以下文章