把链表的值依次push进一个vector,链表的值是note->val,要依次获得链表值可以一直note->next->next…,所以我用了while循环,判断条件是当前节点是否为空,为空说明链表已经被遍历完了。
然后利用vector的反转函数reverse。直接把数组整个倒过来。
class Solution {
public:
vector<int> printListFromTailToHead(ListNode* head) {
vector<int> vec;
ListNode* ptr;
ptr=head;
while(ptr)
{
vec.push_back(ptr->val);
ptr=ptr->next;
}
reverse(vec.begin(),vec.end());
return vec;
}
};
看大佬总结可以用四种方法1.reverse,2.直接插入(头插),3.递归,4.栈
1.直接插入
这里就用直接插入法,vec.insert(begin(),)是在数组头部插入,每次都是头部,这样就相当于倒过来了,也可以叫头插法叭
while(head)
{
//inserter(vec, head->val);
vec.insert(vec.begin(), head->val);
head=head->next;
}
2.栈
栈是先进后出,先把链表数据依次入栈,再出栈给数组。就逆过来了。
stack<int> stk;
ListNode *p = head;
if(head)
{
while(p)
{
stk.push(p->val);
p=p->next;
}
while(!stk.empty())
{
vec.push_back(stk.top());
stk.pop();
}
}
3.递归
递归占用内存多
if(head==NULL)return vec;
vec = printListFromTailToHead(head->next);
vec.push_back(head->val);