【剑指**】6.从尾到头打印链表
来源:互联网 发布:centos 6.5 32位下载 编辑:程序博客网 时间:2024/06/03 19:24
6.从尾到头打印链表
题目描述
输入一个链表,从尾到头打印链表每个节点的值。
题目很经典,因此本文用三种方法来处理。(严格来说算2种)
思路1
先顺序输出链表数据,然后翻转输出的结果。
/*** struct ListNode {* int val;* struct ListNode *next;* ListNode(int x) :* val(x), next(NULL) {* }* };*/class Solution {public: vector<int> printListFromTailToHead(ListNode* head) { if (head == NULL) return {}; vector<int> ret; ListNode* pRead = head; while(pRead != NULL) { ret.push_back(pRead->val); pRead = pRead->next; } std::reverse(ret.begin(), ret.end()); return ret; }};
从头到位遍历一遍数据,因此时间复杂度:O(n)
空间复杂度:O(n)
思路2 栈 非递归
/*** struct ListNode {* int val;* struct ListNode *next;* ListNode(int x) :* val(x), next(NULL) {* }* };*/class Solution {public: vector<int> printListFromTailToHead(ListNode* head) { if (head == NULL) return {}; std::stack<ListNode*> sk; ListNode* pRead = head; while (pRead != NULL) { sk.push(pRead); pRead = pRead->next; } vector<int> ret; while (!sk.empty()) { ret.push_back(sk.top()->val); sk.pop(); } return ret; }};
思路3 栈 递归
class Solution {public: vector<int> printListFromTailToHead(ListNode* head) { if (head == NULL) return {}; vector<int> ret; ListNode* pRead = head; help(ret, pRead); return ret; } void help(vector<int>& ret, ListNode* node) { if (node == NULL) return; help(ret, node->next); ret.push_back(node->val); }};
阅读全文
0 0
- 剑指:从尾到头打印链表
- 【剑指**】6.从尾到头打印链表
- 从尾到头打印链表
- 从尾到头打印链表
- 从尾到头打印链表
- 从尾到头打印链表
- 1、从尾到头打印链表
- 从尾到头打印链表
- 从尾到头打印链表
- 【20】从尾到头打印链表
- 从尾到头打印链表
- 从尾到头打印链表
- 从尾到头打印链表
- 从尾到头打印链表
- 从尾到头打印链表
- 从尾到头打印链表
- Offer5 从尾到头打印链表
- 从尾到头打印链表
- php与java通用AES加密解密算法
- array,object,callback/callable
- 第一章 | 使用python机器学习
- 268. Missing Number
- python根据BM25实现文本检索
- 【剑指**】6.从尾到头打印链表
- el-table-column动态加载列
- 用java玩转mysql主从备份机制之binlog
- 使用SSM+Maven搭建项目框架常见问题及解决方法
- hosts文件修改之后立刻刷新
- eclipse中向svn提交代码
- 苹果越来越不要脸了
- iOS 面试题~避免循环引用~解决方法
- 在PHP中类型转换之布尔类型