题目链接
题目描述
输入一个链表,从尾到头打印链表每个节点的值。
思路:从尾到头打印,符合后进先出,用栈存储,然后存入vector.O(n)
另外,递归本质也是栈结构,所以也可以用递归写。
代码【栈】:
/**
* struct ListNode {
* int val;
* struct ListNode *next;
* ListNode(int x) :
* val(x), next(NULL) {
* }
* };
*/
class Solution {
public:
vector<int> printListFromTailToHead(ListNode* head) {
vector<int>res;
stack<ListNode*>node;
ListNode* pNode=head;
while(pNode!=nullptr) {
node.push(pNode);
pNode=pNode->next;
}
while(!node.empty()) {
pNode=node.top();
node.pop();
res.push_back(pNode->val);
}
return res;
}
};
代码【递归】:
/**
* struct ListNode {
* int val;
* struct ListNode *next;
* ListNode(int x) :
* val(x), next(NULL) {
* }
* };
*/
class Solution {
public:
vector<int>res;
vector<int>& printListFromTailToHead(ListNode* head) {
if(head!=nullptr) {
if(head->next!=nullptr) {
printListFromTailToHead(head->next);
}
res.push_back(head->val);
}
return res;
}
};
注意:递归版的&加比不加要稍快些。虽然递归代码简洁,当递归调用层数很深时,可能会导致函数调用栈溢出。