c++三种解法
顺序输入再反转
class Solution {
public:
vector<int> printListFromTailToHead(ListNode* head) {
vector<int> ans;
while(head){
ans.push_back(head->val);
head=head->next;
}
//可以直接使用库函数reverse()
int tmp=0;
for(int i=0;i<ans.size()/2;i++){
tmp=ans[i];
ans[i]=ans[ans.size()-1-i];
ans[ans.size()-1-i]=tmp;
}
return ans;
}
}; 利用递归实现栈的效果来反转
class Solution {
public:
vector<int> printListFromTailToHead(ListNode* head) {
vector<int> ans;
if(!head) return ans;
ans=printListFromTailToHead(head->next);
ans.push_back(head->val);
return ans;
}
};先判断终止条件,然后处理当前节点:将本节点结果放在上一个节点结果的后面。
反转链表再输出
class Solution {
public:
vector<int> printListFromTailToHead(ListNode* head) {
ListNode* pre=NULL;
ListNode* cur=head;
ListNode* tmp;
while(cur){
tmp=cur->next;
cur->next=pre;
pre=cur;
cur=tmp;
}
vector<int> ans;
while(pre){
ans.push_back(pre->val);
pre=pre->next;
}
return ans;
}
};反转链表需要三个节点:前一个,当前的,以及用来保护现场的临时节点。

京公网安备 11010502036488号