从尾到头打印链表
来源:互联网 发布:大数据分析技术导论 编辑:程序博客网 时间:2024/05/12 01:47
题意:输入一个链表,从尾到头打印链表每个节点的值。
解题思路:
最直接的思路是将链表反转,然后按序输出
反转链表有递归与非递归两种方式,具体可点击下面:
非递归反转链表
递归反转链表
但打印只是一个只读操作,最好不要破坏链表的结构,有以下几种解法
1.利用栈后进先出的原理,即可将链表逆序输出
2.使用递归
3.依次将链表中各结点的值insert到vector头,原理同stack
4.依次将链表中各结点的值push_back到vector中,再reverse一下即可
//解法1
/*** struct ListNode {* int val;* struct ListNode *next;* ListNode(int x) :* val(x), next(NULL) {* }* };*/class Solution {public: vector<int> printListFromTailToHead(ListNode* head) { vector<int> result; if (head == NULL) return result; stack<ListNode *> stack; ListNode *node = head; while (node) { stack.push(node); node = node->next; } while (!stack.empty()) { node = stack.top(); result.push_back(node->val); stack.pop(); } return result; }};
//解法2
class Solution {public: vector<int> printListFromTailToHead(ListNode* head) { vector<int> result; ListNode *node = head; if (node) { result.insert(result.begin(), node->val); if (node->next) { vector<int> tempVec = printListFromTailToHead(node->next); if (tempVec.size() > 0) result.insert(result.begin(), tempVec.begin(), tempVec.end()); } } return result; }};
//解法3
class Solution {public: vector<int> printListFromTailToHead(ListNode* head) { vector<int> result; ListNode *node = head; if (node) { result.insert(result.begin(), node->val); while (node->next) { result.insert(result.begin(), node->next->val); node = node->next; } } return result; }};
//解法4
class Solution {public: vector<int> printListFromTailToHead(ListNode* head) { vector<int> result; ListNode *node = head; while (node) { result.push_back(node->val); node = node->next; } reverse(result.begin(), result.end()); return result; }};
0 0
- 从尾到头打印链表
- 从尾到头打印链表
- 从尾到头打印链表
- 从尾到头打印链表
- 1、从尾到头打印链表
- 从尾到头打印链表
- 从尾到头打印链表
- 【20】从尾到头打印链表
- 从尾到头打印链表
- 从尾到头打印链表
- 从尾到头打印链表
- 从尾到头打印链表
- 从尾到头打印链表
- 从尾到头打印链表
- Offer5 从尾到头打印链表
- 从尾到头打印链表
- 1、从尾到头打印链表
- 从尾到头打印链表
- 打印机无法双面打印处理办法
- (OK) Android架构实例分析之注册hello HAL的JNI方法表
- NAS部署系列:Centos7 下yum安装配置minidlna
- c++里面的值传递,指针传递,地址传递详解
- 神经网络浅讲:从神经元到深度学习
- 从尾到头打印链表
- Java中的一些小问题
- The Singularity Is Near(奇点临近)阅读笔记----六大纪元
- JS定时器初步实践
- Spring第一阶段
- Spring4.0.9+SpringMVC4.0.9+SpringSecurity3.2.5+MyBatis3.2.5+Activiti5.21即:SSM框架的企业级搭建
- nginx配置实现https
- Java学习篇之Map集合的遍历方法集锦
- S1.2_Struts2_ByManual 手工编写第一个Struts2范例