《剑指Offer》读书笔记03:从尾到头打印链表

《剑指Offer》读书笔记03:从尾到头打印链表


题目描述

输入一个链表,从尾到头打印链表每个节点的值。


解题思路

  1. 思路1(参考《剑指Offer》):
    因为遍历链表时顺序为从头到尾,而题目要求从尾到头打印。自然想到栈(Stack)这种数据结构来实现。在从头到尾遍历时,把每个结点的值存至栈,然后从栈顶一个一个打印。
  2. 思路2(参考《剑指Offer》):
    因为递归在本质上是一个栈结构,所以同样可以用递归来实现。
  3. 思路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;
    }
};
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值