clion测试通过。
思路:从头至尾遍历线性表,用栈承接遍历的值,再从栈中恢复数据。
#include <stdio.h>
#include <vector>
#include <stack>
using namespace std;
// 链表节点
struct ListNode {
int val;
struct ListNode *next;
ListNode(int x) : val(x), next(NULL) {}
};
class Solution {
public:
vector<int> printListFromTailToHead(ListNode* head) {
vector<int> ret;
stack<int> s;
ListNode* p = head->next;
while(p) {
s.push(p->val);
p = p->next;
}
while(!s.empty()) {
ret.push_back(s.top());
s.pop();
}
return ret;
}
};
int main() {
// 建立链表
ListNode* head = new struct ListNode(0);
ListNode* p = head;
for(int i=0; i<10; i++) {
ListNode* tmp = new struct ListNode(i);
p->next = tmp;
p = p->next;
}
// 输出信息
for(int i=0; i<10; i++)
printf("%d\t", i);
printf("\n");
// 获取逆序vector
Solution s;
const vector<int>& result = s.printListFromTailToHead(head);
printf("%d\n", result.size());
for(vector<int>::const_iterator iter=result.begin(); iter!=result.end(); iter++)
printf("%d\n", *iter);
}