从尾到头打印链表
输入一个链表,按链表从尾到头的顺序返回一个ArrayList。
思路一:栈存储
逆序就想到栈,先遍历入栈,随后出栈就是逆序。
代码:
/**
* struct ListNode {
* int val;
* struct ListNode *next;
* ListNode(int x) :
* val(x), next(NULL) {
* }
* };
*/
class Solution {
public:
vector<int> printListFromTailToHead(ListNode* head) {
stack<int> st;//定义栈
vector<int>res;//定义结果向量
while(head){//从头遍历直到指向空
st.push(head->val);//将当前节点对应的值压入栈中
head = head->next;//指针后移
}
while(!st.empty()){//依次出栈,存储到res中
res.push_back(st.top());
st.pop();
}
return res;
}
};
时间复杂度: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;
if(!head) return res;//边界条件
res = printListFromTailToHead(head->next);//层层深入
res.push_back(head->val);//每次添加的都是当前最后一个元素
return res;
}
};
时间复杂度:O(n)
博主是一个萌新,欢迎大佬们来提出改进建议!