面试题6:从尾到头打印链表
题目:
输入一个链表的头节点,从尾到头反过来打印出每个节点的值。链表节点定义如下:
struct ListNode{
int m_nkey;
ListNode* m_pnext;
}
思路:
个人:就是先从头遍历一边整个链表把节点的值存在栈里面,最后在从栈里面弹出值。
书:是由上面栈的结构联想到递归实现,因为递归的本质就是一个栈结构,就是当我们每访问到一个节点的时候,先递归输出他后面的节点,再输出该节点本身。
代码:
/*栈实现*/
void PrintListNode(ListNode* pHead){
stack<int> value;
ListNode* pNode = pHead;
while(pNode!=nullptr){
value.push(pNode->m_nkey);
pNode = pNode->m_pnext;
}
while(!value.empty()){
cout<<value.top()<<" ";
value.pop();
}
}
/*递归实现*/
void PrintListNode(ListNode* pHead){
if(pHead==nullptr)
return ;
PrintListNode(pHead->m_pnext);
cout<<pHead->value<<" ";
}
/*递归的不好就是,当链表非常的长,就会导致函数调用的层级很深,从而导致函数调用栈溢出*/
1296

被折叠的 条评论
为什么被折叠?



