《剑指Offer》读书笔记03:从尾到头打印链表
题目描述
输入一个链表,从尾到头打印链表每个节点的值。
解题思路
- 思路1(参考《剑指Offer》):
因为遍历链表时顺序为从头到尾,而题目要求从尾到头打印。自然想到栈(Stack)这种数据结构来实现。在从头到尾遍历时,把每个结点的值存至栈,然后从栈顶一个一个打印。 - 思路2(参考《剑指Offer》):
因为递归在本质上是一个栈结构,所以同样可以用递归来实现。 - 思路3(网络):
因为牛客网提供的函数输出类型为vector,在遍历时从头到尾依次存储数字,然后可以调用reverse函数(#include<algorithm>
)实现。或者可以对vector中的n个元素(奇偶均可),第i个与第(n-1-i)个元素进行调换。
参考代码
/*
* struct ListNode {
* int val;
* struct ListNode *next;
* ListNode(int x) :
* val(x), next(NULL) {
* }
* };
*/
class Solution {
public:
vector<int> printListFromTailToHead(struct ListNode* head) {
vector<int> vResult;
if ( head != NULL ) {
while ( head != NULL ) {
vResult.push_back(head->val);
head = head->next;
}
#if 1
for ( size_t i = 0; i < vResult.size()/2; i++ ) {
int tmpVal = 0;
tmpVal = vResult[i];
vResult[i] = vResult[vResult.size()-i-1];
vResult[vResult.size()-i-1] = tmpVal;
}
#else
reverse(vResult.begin(), vResult.end());
#endif
}
return vResult;
}
};