//第一反应想到的
利用栈的特性:
class Solution { public: vector<int> printListFromTailToHead(ListNode* head) { vector<int> value; ListNode *p=NULL; p=head; stack<int> stk; while(p!=NULL){ stk.push(p->val); p=p->next; } while(!stk.empty()){ value.push_back(stk.top()); stk.pop(); } return value; } };
递归写法: //第二种想到的。。
vector<int> vec; vector<int> printListFromTailToHead(ListNode* head) { if(head == nullptr) // return vec; if(head != nullptr) { printListFromTailToHead(head->next); } vec.push_back(head->val); return vec; }
这个没有考虑..感觉操作次数偏多,影响效率.看到别人的题解学习一下思路
第三种:数组翻转
链接:https://www.nowcoder.com/questionTerminal/d0267f7f55b3412ba93bd35cfa8e8035?f=discussion 来源:牛客网 class Solution { public: vector<int> printListFromTailToHead(ListNode* head) { vector<int> value; ListNode *p=NULL; p=head; while(p!=NULL){ value.push_back(p->val); p=p->next; } //reverse(value.begin(),value.end()); //C++自带的翻转函数 int temp=0; int i=0,j=value.size()-1; while(i<j){ temp=value[i]; //也可以用swap函数,swap(value[i],value[j]); value[i]=value[j]; value[j]=temp; i++; j--; } return value; } };