当前位置: 首页 > news >正文

图书馆整理I(从尾到头打印列表),剑指offer,力扣

目录

题目地址:

我们直接看题解吧:

解题方法:

难度分析:

审题目+事例+提示:

解题思路(辅助栈):

代码(递归):

代码(列表插入):

相似题目对比: 


题目地址:

LCR 123. 图书整理 I - 力扣(LeetCode)

难度:简单

今天刷图书馆整理I(从尾到头打印列表),大家有兴趣可以点上看看题目要求,试着做一下

我们直接看题解吧:

解题方法:

方法1、递归

方法2、辅助栈法

方法3、列表的首位插入(Java、/Python)

难度分析:

本题属于简单题,主要考察的列表、栈的基本原理,递归比较难一点

审题目+事例+提示:

`题目隐含要求的是返回的是数组

`由题意可知,链表只能从前往后遍历,而题目要求倒序输出,即排在后面的节点需要先输出,这里类似先进后出的思想。因此,可以利用栈的来实现。

解题思路(辅助栈):

1、创建一个栈stack,一个数组res

2、第一个循环遍历链表,依次将对应的节点压入栈中

3、第二个循环,将栈中元素弹出,依次赋值给数组

4、返回数组

代码实现:

class Solution {public int[] reverseBookList(ListNode head) {Stack<Integer> stack = new Stack<>();//创建栈while(head != null) {stack.push(head.val);       //利用头指针遍历链表,依次压入栈head = head.next;            //头指针指向下一个节点}int[] res = new int[stack.size()]; //创建与栈一样大的数组for(int i = 0; i < res.length; i++)res[i] = stack.pop();             //循环依次将栈元素弹出,放到数组中return res;}
}

代码(递归):

class Solution {ArrayList<Integer> tmp = new ArrayList<Integer>();public int[] reverseBookList(ListNode head) {recur(head);int[] res = new int[tmp.size()];for(int i = 0; i < res.length; i++)res[i] = tmp.get(i);return res;}void recur(ListNode head) {if(head == null) return;recur(head.next);tmp.add(head.val);}
}

代码(列表插入):

  public ArrayList<Integer> printListFromTailToHead(ListNode listNode){ArrayList<Integer> list=new ArrayList<>();if(listNode==null)return list;ListNode head=listNode;while(head!=null){ list.add(0,head.val);  //每次插入数据,都总是插入到首位head=head.next;}return list;}

相似题目对比: 

上面题目与下面这道题不同点在于,上面的不能原地改变原列表,否则就跟下面这道题一样了

反转链表,剑指offer,力扣-CSDN博客

http://www.lryc.cn/news/235267.html

相关文章:

  • C++编写的多线程自动爬虫程序
  • SMB信息泄露的利用
  • QT自定义信号,信号emit,信号参数注册
  • 06.webpack性能优化--构建速度
  • 11-15 周三 softmax 回归学习
  • React新手必懂的知识点
  • es为什么这么快
  • Pandas分组聚合_Python数据分析与可视化
  • VMware17虚拟机Linux安装教程(详解附图,带VMware Workstation 17 Pro安装)
  • 基于SDN技术构建多平面业务承载网络
  • 关于卓越服务的调研报告
  • ubuntu22.04换源
  • 03. Python中的语句
  • Linux CentOS7 添加网卡
  • 2311rust,到54版本更新
  • 【linux】补充:高效处理文本的命令学习(tr、uniq、sort、cut)
  • Redis篇---第七篇
  • Shell脚本:Linux Shell脚本学习指南(第一部分Shell基础)一
  • 长短期记忆(LSTM)与RNN的比较:突破性的序列训练技术
  • Swift 如何打造兼容新老系统的字符串分割(split)方法
  • JVM面试必备
  • 战神传奇【我本沉默精修版】win服务端+双端+充值后台+架设教程
  • 安卓手机投屏到电视,跨品牌、跨地域同样可以实现!
  • python变量名解析总结
  • 端口号大揭秘:网络世界的“门牌号”有多牛?
  • vue解除数据双向绑定
  • 组件插槽,生命周期,轮播图组件的封装,自定义指令的封装等详解以及axios的卖座案例
  • 小美的树上染色
  • 1.rk3588的yolov5运行:pt_onnx_rknn转换及rknn在rk3588系统python运行
  • 适用于全部安卓手机的 5 大免费 Android 数据恢复