链表怎么输出最后一个元素无空格_剑指offer系列----从尾到头打印链表
从尾到头打印链表
信息卡片
- 时间:2020-03-23
- 题目:从尾到头打印链表
- tag:
list
题目描述
输入一个链表,按链表从尾到头的顺序返回一个 ArrayList。
01
调用 reverse 函数
解题思路
这是一种简单粗暴的解法。先遍历一遍链表,在遍历链表的同时将当前指针指向的值放入 vector 数组中,直到链表遍历完成。最后,使用 reverse 函数将 vector 数组进行反转。
public:vector<int> printListFromTailToHead(ListNode* head) {vector<int>ArrayList;if(!head || !head->next)return {};while(head){ArrayList.push_back(head->val);head=head->next;}reverse(ArrayList.begin(),ArrayList.end());return ArrayList;}
};
02
调用 insert 函数
解题思路
与解法一有些类似,依次从前往后遍历链表,在遍历链表的同时,调用 vector 的 insert 函数从头部插入此时链表指针指向的值。最后就得到了一个反转的数组。
class Solution {
public:vector<int> printListFromTailToHead(ListNode* head) {vector<int>ArrayList;if(head){ArrayList.insert(ArrayList.begin(),head->val);while(head->next){ArrayList.insert(ArrayList.begin(),head->next->val);head=head->next;}}return ArrayList;}
};
03
调用栈方法
解题思路
创建一个元素为指针类型的栈,来存放链表的指针。在遍历链表的同时将指针入栈,此时栈的底部是链表的第一个元素,栈顶是链表的最后一个元素。弹出栈的时候把指针指向的值放入 vector 数组里面。
class Solution {
public:vector<int> printListFromTailToHead(ListNode* head) {stack<ListNode*> stackNodes;vector<int> ArrayList;ListNode* p=head;while (p != NULL){stackNodes.push(p);p = p->next;}while (!stackNodes.empty()){p=stackNodes.top();ArrayList.push_back(p->val);stackNodes.pop();}return ArrayList;}
};
04
递归调用
解题思路
递归的本质就是一个栈结构,可以用递归来实现。要实现反过来输出的链表,我们每访问到一个节点的时候,先递归输出它后面的节点,再输出该节点自身,这样就得到反转的链表。
class Solution {
public:vector<int> printListFromTailToHead(struct ListNode* head) {vector<int> vec;printListFromTailToHead(head,vec);return vec;}void printListFromTailToHead(struct ListNode* head,vector<int> &vec) {if(head!=nullptr){if(head->next!=nullptr){printListFromTailToHead(head->next,vec);}vec.push_back(head->val);}}
};
总结
解法四递归的方法看起来比较简洁,但是凡事都有利弊,当链表非常长的时候,就会导致函数调用的层级很深,从而有可能导致函数调用栈溢出。解法一、解法二、解法三要优于解法四。
链表怎么输出最后一个元素无空格_剑指offer系列----从尾到头打印链表相关推荐
- 《LeetCode力扣练习》剑指 Offer 06. 从尾到头打印链表 Java
<LeetCode力扣练习>剑指 Offer 06. 从尾到头打印链表 Java 一.资源 题目: 输入一个链表的头节点,从尾到头反过来返回每个节点的值(用数组返回). 示例 1: 输入: ...
- 【LeetCode】剑指 Offer 06. 从尾到头打印链表
[LeetCode]剑指 Offer 06. 从尾到头打印链表 文章目录 [LeetCode]剑指 Offer 06. 从尾到头打印链表 一.笨比解法 二.递归法 三.辅助栈法 总结 一.笨比解法 算 ...
- LeetCode Algorithm 剑指 Offer 06. 从尾到头打印链表
剑指 Offer 06. 从尾到头打印链表 Ideas 遍历链表,每次在vector的头部insert当前元素值. Code C++ class Solution {public:vector< ...
- 【三种解法】剑指 Offer 06. 从尾到头打印链表【附完整可运行代码】
立志用最少的代码做最高效的表达 输入一个链表的头节点,从尾到头反过来返回每个节点的值(用数组返回). 示例 1: 输入:head = [1,3,2] 输出:[2,3,1] 限制: 0 <= 链表 ...
- 剑指offer——6.从尾到头打印链表
题目: 题:输入一个链表的头节点,从尾到头打印链表每个节点的值 知识点: 链表的基本知识,节点的2个属性(value.next): 栈的基本使用:创建空栈.pop.empty.push等:参考:htt ...
- 【剑指Offer】从尾到头打印链表
剑指Offer 从尾到头打印链表 题目描述 解法1 实现代码 一点补充 题目描述 输入一个链表,按链表值从尾到头的顺序返回一个ArrayList. 解法1 这道题主要思路是while循环从头遍历整个列 ...
- 剑指Offer #03 从尾到头打印链表(递归)
题目来源:牛客网-剑指Offer专题 题目地址:从尾到头打印链表 题目描述 输入一个链表,按链表从尾到头的顺序返回一个ArrayList. 题目解析 方法一: 因为题目要求返回的顺序是从尾到头,所以我 ...
- 剑指 Offer 06. 从尾到头打印链表(python3编写)
目录 1.题目描述: 2.方法一:使用栈保存结果 思路: 代码(迭代法): 代码(递归法): 3.方法二:反转链表 思路: 代码: 4.方法三:保存数组,再反转数组 思路: 代码: 5.总结: 1.题 ...
- 剑指offer :从尾到头打印链表
题目描述: 输入一个链表,按链表值从尾到头的顺序返回一个ArrayList. 解题思路: 链表的遍历只能从头向尾进行,要从尾到头输出,考虑用栈.先从头到尾遍历一次链表,同时将值进栈,再清空栈,同时将值 ...
最新文章
- Exchange server 2010 beta安装部署流程
- 【Linux】44.设置ubuntu电脑为简单的密码
- 9.停下来说说jquery
- Servlet的重定向和转发特点
- JAVA进阶教学之(String类的构造方法)
- oracle 数据库日期定义,Oracle数据库实现日期遍历功能
- [Magento error] The url is not accessible, unable to read response
- python网络虫营销_python与sem,大数据降低竞价推广成本利器
- 我为什么憎恨Framework
- Nginx系列(6):Web服务器分析(理论)
- Java集合常见面试题集锦
- 【Codeforces 372A】Counting Kangaroos is Fun
- aardio - f()函数通过变量名将变量值整合到一串文本中
- 微信机器人接口,个人号API二次开发
- 朱丹老师课程学习笔记:8、职场晋升-没人带怎么办?这样搜资料的小白也能变大神
- 烟雨江湖服务器维护,烟雨江湖初始属性选择推荐 烟雨江湖出生攻略
- JSP中img标签图片在浏览器中不显示问题
- 为什么能够通过type_id::create创建实例
- 大势所趋,RIA已成为主流应用程序!
- 通俗易懂讲解汇率、外币汇率、本币汇率、通货膨胀
热门文章
- ssm整合 durid数据源 报错java.sql.SQLException: Access denied for user ‘xxx‘@‘localhost‘
- jdbc 连接 Oracle 进行基本的增删改查
- 【C++深度剖析教程15】经典问题解析之关于string的疑问
- not enough arguments for format string
- HDU 1284 钱币兑换问题 (动态规划 背包方案数)
- Android笔记-Activity相关+内存泄漏
- React Navigation 导航栏样式调整+底部角标消息提示
- 内置函数之sorted,filter,map
- javah找不到类文件
- [Leetcode][第322题][JAVA][零钱兑换][回溯][记忆化搜索][动态规划]