题目描述
示例:
代码:
方法一:栈
运用栈的思想
我们遍历链表将值依次入栈,然后出栈进入数组,然后返回即可
class Solution {
public:
vector<int> printListFromTailToHead(ListNode* head) {
stack<int> s;
vector<int> v;
while (head) {
s.push(head->val);
}
while(!s.empty()) {
v.push_back(s.top());
s.pop();
}
return v;
}
};
这种方法会导致时间溢出,所以编译不过,但是java用这种方法有可能过
因为c需要写一个stack的库,而且也过不了,所以就不写了
方法二:旋转数组
遍历链表,用数组进行记录,然后逆置数组即可
C++
class Solution {
public:
vector<int> printListFromTailToHead(ListNode* head) {
vector<int> v;
while (head) {
v.push_back(head->val);
head = head->next;
}
reverse(v.begin(), v.end());
return v;
}
};
C
遍历链表记录链表的长度,或者直接创建一个长为10001的数组
遍历链表将值赋给数组
旋转数组即可
方法三:递归方式
class Solution {
public:
void digui(ListNode* head, vector<int>& v) {
if (nullptr == head) {
return;
}
digui(head->next, v);
v.push_back(head->val);
}
vector<int> printListFromTailToHead(ListNode* head) {
vector<int> v;
digui(head, v);
return v;
}
};
遍历链表将值按照头插的方式插入返回数组中