题目:从尾到头打印链表

输入一个链表的头节点,从尾到头反过来返回每个节点的值(用数组返回)。

示例 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. 从尾到头打印链表相关推荐

  1. 剑指offer面试题06. 从尾到头打印链表(辅助栈法)

    题目描述 输入一个链表的头节点,从尾到头反过来返回每个节点的值(用数组返回). 思路 详见链接 代码 class Solution:def reversePrint(self,head:ListNod ...

  2. 剑指offer面试题[5]-从尾到头打印链表

    目描述 输入一个链表,从尾到头打印链表每个节点的值. /** *  struct ListNode { *        int val; *        struct ListNode *next ...

  3. 剑指Offer - 面试题6. 从尾到头打印链表(栈,递归,反转链表)

    文章目录 1. 题目 2. 解题 2.1 stack解题 2.2 递归 2.3 反转链表 1. 题目 输入一个链表的头节点,从尾到头反过来返回每个节点的值(用数组返回). 示例 1: 输入:head ...

  4. 剑指offer 面试题5—从尾到头打印链表

    题目: 输入一个链表的头结点,从尾到头反过来打印出每个结点的值. 考虑用栈 public void invertedList1(ListNode head) {if (head == null) {r ...

  5. 剑指Offer - 九度1511 - 从尾到头打印链表

    剑指Offer - 九度1511 - 从尾到头打印链表2013-11-29 21:08 题目描述: 输入一个链表,从尾到头打印链表每个节点的值. 输入: 每个输入文件仅包含一组测试样例. 每一组测试案 ...

  6. 剑指offer java版 test3—从尾到头打印链表

    标题:剑指offer java版 test3-从尾到头打印链表 题目:输入一个链表,按链表从尾到头的顺序返回一个ArrayList. 解答:知识不够全面,用ArrayList做的 但是看到大佬们还可以 ...

  7. 【剑指offer】登峰造极之从尾到头打印链表

    题目链接 从尾到头打印链表. 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 32M,其他语言64M 热度指数:1254529 题目描述 /** struct ListNode { i ...

  8. 剑指offer(C++)-JZ6:从尾到头打印链表(数据结构-链表)

    作者:翟天保Steven 版权声明:著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处 题目描述: 输入一个链表的头节点,按链表从尾到头的顺序返回每个节点的值(用数组返回). 如输入{ ...

  9. 面试题06. 从尾到头打印链表

    2020-03-22 1.题目描述 从尾到头打印链表 2.题解 可以先把链表先逆置再输出,或者将链表的值放在vector里存着,再对vector倒序. 3.代码 class Solution { pu ...

最新文章

  1. windows 下使用caffy_折腾下Windows下的Elasticsearch安装与使用
  2. 【Web安全】DVWA之Command injection(命令执行漏洞)探索
  3. IBM专家谈(一)能源效率是POWER7的另一个优势
  4. C++this指针的用法
  5. 树形结构 —— 树与二叉树
  6. 计算机组成原理第四章中,计算机组成原理第四章..ppt
  7. Excel数据转换成SQL
  8. 用计算机分析卫星云图 进行实时天气,卫星云图,气象卫星云图,卫星云图高清实时滚动播放 - 围观天气...
  9. 如何用10分钟做出一个表情包视频
  10. 数值代数中的数学原理及其证明(一)
  11. XTUOJ-1277-Triangle
  12. Linux摄像头驱动框架
  13. 5分钟通过水痘事件来认识系统架构
  14. LVGL lv_msgbox消息对话框(22)
  15. transform改变图片大小以及位置
  16. ecs共享型s6怎么样?
  17. vultr完美搭建 Nextcloud 私有云网盘教程
  18. 推荐几款jQuery时间轴插件Timeline
  19. php 毛玻璃,毛玻璃 - 晚晴小筑 - OSCHINA - 中文开源技术交流社区
  20. MySQL 的数据备份与恢复

热门文章

  1. Java基于Quartz的定时任务调度服务(一)
  2. Linux Supervisor的安装与使用入门
  3. java.lang.Thread使用及总结
  4. 微软安全新闻聚焦-双周刊第三十四期
  5. 《OpenCV3编程入门》学习笔记6 图像处理(四)形态学滤波(2):开运算、闭运算、形态学梯度、顶帽、黑帽
  6. 计算机性能指标ppt,计算机网络分类与主要性能指标.ppt
  7. linux wifi-tools,Linux下WiFi工具wireless_tools交叉编译,及其支持生成iwconfig使用的内核配置...
  8. jeecgboot前端开发_一款基于代码生成器的Java快速开发平台【jeecg-boot】
  9. 百度语音合成 js html,Node.js结合百度TTS接口实现文字转语音功能
  10. 网站的 计算机主机作用是什么意思,网关是什么意思?网关的作用是什么?