算法
(遍历链表) $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> printListReversingly(ListNode* head) {
vector<int> res;
while (head) {
res.push_back(head->val);
head = head->next;
}
return vector<int>(res.rbegin(), res.rend());
}
};
开阔思路, 学到了,赞
我是菜鸡,可不可以解释一下//res.push_back(head->val);//是什么意思
这是vector的函数,push_back是添加到vector的尾部,head->val就是链表的数字值,意思就是将这个数字添加到vec数组里
9999,学习到了很多
# 牛
tql
大佬,请问这是什么意思?
第二种是不是用了递归啊!
有一个问题,递归调用的过程中,res不是一个局部变量吗,在函数内被定义,那么我再调用一次printListReversungly函数,执行过程中有创建了一个局部变量auto,这两个函数只是同名应该是两个变量才对..晕了晕了
auto res = printListReversingly(head->next);
这一句代码接受了来自上一层返回的res
res.insert(res.begin(), ptr->val)
反向迭代器涨姿势了
加油hh
Y总 return vector[HTML_REMOVED](res.rbegin(), res.rend()); 和 reverse(res.begin(), res.end()) 然后 return res 相比有什么优势吗?是不是不用再翻转整个vector了?
就是代码少了一行,其他的区别不大
res.push_back(head->val);
head = head->next;
这是啥意思啊
先翻转链表然后存进数组为什么不行呢
我也是这样写的,好像是 链表没值吗,值要输入
我这样写的,是可以AC的
我也这样写的,可以AC呀
C语言
这个题用c的话感觉用的尾递归,栈用链表实现好像也是和尾递归类似,用数组栈的话好像也行。。。
y总nb
萌新求问,这个题可以用辅助栈做么?
这个代码怎么用Java实现呢
class Solution {
public int[] printListReversingly(ListNode head) {
int k = 0;
for( ListNode i = head; i != null; i = i.next)
k++;
int q[] = new int[k];
for( ListNode i = head; i != null; i = i.next) q[–k] = i.val;
return q;
}
}
求解答最后结果不是要数组存储吗
vector就是数组
涨姿势了 太强了
加油hh
递归将数据放入数组
对滴,用尾递归也是可以的。
反向迭代器,mark