面试题5:从尾到头打印链表
链表的Node的结构为:
struct ListNode
{
int Key;
ListNode *Next;
};
看到题目时有两种想法,第一种是用栈,毕竟这就是先进后出的结构,完全满足题目要求。第二种方法就是链表的逆置。两种方法的时间复杂度都是O(n),都是遍历一遍链表然后输出,但是第二种方法改变了链表结构不可取。
第一种方法的实现:
void printLsit(ListNode *pHead)
{
Stack<ListNode *>nodes;
ListNode *pNode = pHead;
while(pNode != NULL)
{
nodes.push(pNode);
pNode = pNode->Next;
}
while(!node.emtpy())
{
pNode = nodes.top();
cout<<pNode->key;
nodes.pop();
}
}