👀先看这里👈
😀作者:江不平
📖博客:江不平的博客
📕学如逆水行舟,不进则退
🎉欢迎关注🔎点赞👍收藏⭐️留言📝
❀本人水平有限,如果发现有错误的地方希望可以告诉我,共同进步👍
🔍题目详情
输入一个链表的头节点,从尾到头反过来返回每个节点的值(用数组返回)。
示例
输入:head = [1,3,2]
输出:[2,3,1]
题目来源:[力扣(LeetCode)]
🤔解题思路
逻辑&步骤
这种倒着来的题目要经常联想到栈。栈的特点是后进先出,即最后压入栈的元素最先弹出。考虑到栈的这一特点,使用栈将链表元素顺序倒置。从链表的头节点开始,依次将每个节点压入栈内,然后依次弹出栈内的元素并存储到数组中。
- 利用head->next遍历链表,将元素入栈;
- 利用栈先进后出的特征,元素出栈保存到vector中,返回vector;
时间复杂度:O(N)
空间复杂度:O(N)
💻代码实现
C++:
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* ListNode *next;
* ListNode(int x) : val(x), next(NULL) {}
* };
*/
class Solution {
public:
vector<int> reversePrint(ListNode* head) {
stack<int> st;
while(head){
st.push(head->val);
head = head->next;
}
vector<int> vec;
while(!st.empty()){
vec.push_back(st.top());
st.pop();
}
return vec;
}
};
💬总结
这种倒过来的题目要经常联想到栈,先进后出的特点。
觉得还不错的铁汁点赞关注一下吧😀