题目:输入一个链表,从尾到头打印链表每个节点的值。
首先分析这个题,如果面试官没有指定说明不允许改变链表结构,首先会想到的是将链表的头部和指针方向改变,但如果面试官说了不能改变链表结构,就得考虑别的方法,此刻你有没有想到一种结构先进后出,对没错,就是栈,如果将链表顺序遍历一遍,将链表中的元素一一PUSH进栈中,然后再将数据一个个拿出来访问,此刻,顺序就逆置了,然而还有优化的余地,那就是采用递归的方法;
//输入一个链表,从尾到头打印链表每个节点的值。
struct ListNode
{
int _key;
int _value;
ListNode *_next;
}
void PrintReversList(ListNode *PHead)
{
std::stack <ListNode*> node;
ListNode *pNode = PHead;
while(pNode != NULL)
{
node.push(pNode);
pNode = pNode->_next;
}
while(!node.empty())
{
pNode = node.top();
printf("%d\t",pNode->_value);
node.pop();
}
}
//递归实现
void PrintListRevers(ListNode *pHead)
{
if(pHead != NULL)
{
if(pHead->_next != NULL)
{
PrintListRevers(pHead->_next);
}
printf("%d\t",pHead->_value);
}
}