LeetCode剑指Offer06.从尾到头打印链表
题目:
输入一个链表的头节点,从尾到头反过来返回每个节点的值(用数组返回)。
示例 1:
输入:head = [1,3,2]
输出:[2,3,1]
限制:
0 <= 链表长度 <= 10000
题解:
1.利用栈
逆序打印一开始想到的就是栈的特性,先入后出。
class Solution {
public:
vector<int> reversePrint(ListNode* head) {
stack<int>sta;
vector<int>vec;
if(!head) return vec;
while(head){
sta.push(head->val);
head=head->next;
}
while(!sta.empty()){
vec.push_back(sta.top());
sta.pop();
}
return vec;
}
};
时间复杂度 O(n),空间复杂度O(n)
2.直接顺序存入vector中,再使用reverse函数对vector反转。
class Solution {
public:
vector<int> reversePrint(ListNode* head) {
vector<int>vec;
while(head){
vec.push_back(head->val);
head=head->next;
}
reverse(vec.begin(),vec.end());
return vec;
}
};
时间复杂度 O(n),空间复杂度O(n)
3.使用递归
class Solution {
public:
vector<int>vec;
vector<int> reversePrint(ListNode* head) {
if(!head) return vec;
reversePrint(head->next);
vec.push_back(head->val);
return vec;
}
};
时间复杂度 O(n),空间复杂度O(n)