剑指offer:面试题06. 从尾到头打印链表
题目:从尾到头打印链表
输入一个链表的头节点,从尾到头反过来返回每个节点的值(用数组返回)。
示例 1:
输入:head = [1,3,2]
输出:[2,3,1]
限制:
0 <= 链表长度 <= 10000
题目:
/*** Definition for singly-linked list.* struct ListNode {* int val;* ListNode *next;* ListNode(int x) : val(x), next(NULL) {}* };*/
class Solution {
public:vector<int> reversePrint(ListNode* head) {}};
解题:
方法一:从头到尾遍历,最后做逆序操作
时间复杂度O(n),空间复杂度O(n)
/*** Definition for singly-linked list.* struct ListNode {* int val;* ListNode *next;* ListNode(int x) : val(x), next(NULL) {}* };*/
class Solution {
public:vector<int> reversePrint(ListNode* head) {vector<int> arrays;while(head) {arrays.emplace_back(head->val);head = head->next;}reverse(arrays.begin(), arrays.end());return arrays;}
};
- ListNode的结构补充
struct ListNode {int val; //当前结点的值ListNode *next; //指向下一个结点的指针ListNode(int x) : val(x), next(NULL) {} //初始化当前结点值为x,指针为空};/**********************************************************/
ListNode* temp1 = new Solution::ListNode(0); //创建新元素,
ListNode* l1 = temp1; //最后的结果l1指向temp1,这样可以获取temp所接收的全部元素,而temp的指针由于每次都往下移,所以每次都更新while ((c = getchar()) != '\n') //以空格区分各个结点的值{if (c != ' '){ungetc(c, stdin); //把不是空格的字符丢回去cin >> num;Solution::ListNode* newnode = new Solution::ListNode(0);newnode->val = num;//创建新的结点存放键盘中读入的值newnode->next = NULL;temp2->next = newnode;//并将其赋值给temp2temp2 = newnode; //此处也可以写成 temp2=temp2->next,使指针指向下一个,以待接收新元素}}
- 补充reverse:reverse函数用于反转在[first,last)范围内的顺序(包括first指向的元素,不包括last指向的元素),reverse函数没有返回值。
方法二:链表反转
时间复杂度O(n),空间复杂度O(1)(链表翻转利用的额外空间不过是几根指针)
链表反转,即从头到位依次将原先的链接反向,这样最后遍历一次链表就可以得到逆序输出的数据,头插法的具体步骤和代码如下图:
class Solution {
public:vector<int> reversePrint(ListNode* head) {if (!head) return vector<int>();ListNode* prev{nullptr}, *succ{nullptr};// 用头插法对链表进行逆序while(head){succ = head->next;head->next = prev;prev = head;head = succ;}vector<int> rslVec;head = prev; // 将head回退一次while(head){rslVec.emplace_back(head->val);head = head->next;}return rslVec;}
};
方法三:
class Solution {
public:vector<int> reversePrint(ListNode* head) {vector<int> res;if(head == NULL){return;}return res;}void rescursive(ListNode* head, vector<int>& res){if(head == NULL){return;}rescursive(head->next, res);res.push_back(head->val);}
};
方法四:
class Solution {
public:vector<int> reversePrint(ListNode* head) {stack<int> st;while(head) {st.push(head->val);head=head->next;}vector<int> res;while(!st.empty()) {res.push_back(st.top());st.pop();}return res;}
};
剑指offer:面试题06. 从尾到头打印链表相关推荐
- 剑指offer面试题06. 从尾到头打印链表(辅助栈法)
题目描述 输入一个链表的头节点,从尾到头反过来返回每个节点的值(用数组返回). 思路 详见链接 代码 class Solution:def reversePrint(self,head:ListNod ...
- 剑指offer面试题[5]-从尾到头打印链表
目描述 输入一个链表,从尾到头打印链表每个节点的值. /** * struct ListNode { * int val; * struct ListNode *next ...
- 剑指Offer - 面试题6. 从尾到头打印链表(栈,递归,反转链表)
文章目录 1. 题目 2. 解题 2.1 stack解题 2.2 递归 2.3 反转链表 1. 题目 输入一个链表的头节点,从尾到头反过来返回每个节点的值(用数组返回). 示例 1: 输入:head ...
- 剑指offer 面试题5—从尾到头打印链表
题目: 输入一个链表的头结点,从尾到头反过来打印出每个结点的值. 考虑用栈 public void invertedList1(ListNode head) {if (head == null) {r ...
- 剑指Offer - 九度1511 - 从尾到头打印链表
剑指Offer - 九度1511 - 从尾到头打印链表2013-11-29 21:08 题目描述: 输入一个链表,从尾到头打印链表每个节点的值. 输入: 每个输入文件仅包含一组测试样例. 每一组测试案 ...
- 剑指offer java版 test3—从尾到头打印链表
标题:剑指offer java版 test3-从尾到头打印链表 题目:输入一个链表,按链表从尾到头的顺序返回一个ArrayList. 解答:知识不够全面,用ArrayList做的 但是看到大佬们还可以 ...
- 【剑指offer】登峰造极之从尾到头打印链表
题目链接 从尾到头打印链表. 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 32M,其他语言64M 热度指数:1254529 题目描述 /** struct ListNode { i ...
- 剑指offer(C++)-JZ6:从尾到头打印链表(数据结构-链表)
作者:翟天保Steven 版权声明:著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处 题目描述: 输入一个链表的头节点,按链表从尾到头的顺序返回每个节点的值(用数组返回). 如输入{ ...
- 面试题06. 从尾到头打印链表
2020-03-22 1.题目描述 从尾到头打印链表 2.题解 可以先把链表先逆置再输出,或者将链表的值放在vector里存着,再对vector倒序. 3.代码 class Solution { pu ...
最新文章
- windows 下使用caffy_折腾下Windows下的Elasticsearch安装与使用
- 【Web安全】DVWA之Command injection(命令执行漏洞)探索
- IBM专家谈(一)能源效率是POWER7的另一个优势
- C++this指针的用法
- 树形结构 —— 树与二叉树
- 计算机组成原理第四章中,计算机组成原理第四章..ppt
- Excel数据转换成SQL
- 用计算机分析卫星云图 进行实时天气,卫星云图,气象卫星云图,卫星云图高清实时滚动播放 - 围观天气...
- 如何用10分钟做出一个表情包视频
- 数值代数中的数学原理及其证明(一)
- XTUOJ-1277-Triangle
- Linux摄像头驱动框架
- 5分钟通过水痘事件来认识系统架构
- LVGL lv_msgbox消息对话框(22)
- transform改变图片大小以及位置
- ecs共享型s6怎么样?
- vultr完美搭建 Nextcloud 私有云网盘教程
- 推荐几款jQuery时间轴插件Timeline
- php 毛玻璃,毛玻璃 - 晚晴小筑 - OSCHINA - 中文开源技术交流社区
- MySQL 的数据备份与恢复
热门文章
- Java基于Quartz的定时任务调度服务(一)
- Linux Supervisor的安装与使用入门
- java.lang.Thread使用及总结
- 微软安全新闻聚焦-双周刊第三十四期
- 《OpenCV3编程入门》学习笔记6 图像处理(四)形态学滤波(2):开运算、闭运算、形态学梯度、顶帽、黑帽
- 计算机性能指标ppt,计算机网络分类与主要性能指标.ppt
- linux wifi-tools,Linux下WiFi工具wireless_tools交叉编译,及其支持生成iwconfig使用的内核配置...
- jeecgboot前端开发_一款基于代码生成器的Java快速开发平台【jeecg-boot】
- 百度语音合成 js html,Node.js结合百度TTS接口实现文字转语音功能
- 网站的 计算机主机作用是什么意思,网关是什么意思?网关的作用是什么?