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

来源:互联网 发布:淘宝特种经营报名入口 编辑:程序博客网 时间:2024/06/11 21:57

《剑指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;    }};
0 0
原创粉丝点击