大厂常见算法50题-图书整理(从头到尾打印链表)

2024-05-04 18:04

本文主要是介绍大厂常见算法50题-图书整理(从头到尾打印链表),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

请添加图片描述

专栏持续更新50道算法题,都是大厂高频算法题,建议关注, 一起巧‘背’算法!

文章目录

  • 题目
  • 解法一 递归 + 辅助栈
  • 解法二 辅助栈
  • 总结

题目

题目地址
image.png

解法一 递归 + 辅助栈

  1. 根据头节点(对象)的next节点属性可以得到所有的节点
  2. 通过递归将数据都放到辅助栈中,递归出口是节点为null
  3. 初始化一个int[]数组,将栈中的元素弹出并放入数组
/*** Definition for singly-linked list.* public class ListNode {*     int val;*     ListNode next;*     ListNode(int x) { val = x; }* }*/
class Solution {// 声明一个栈static Stack<ListNode> stack = new Stack<ListNode>();public int[] reversePrint(ListNode head) {// 将数据压如栈中recurrence(head);int size = stack.size();System.out.println(size);// 声明返回的数组int[] result = new int[size];// 遍历栈,弹出for (int i = 0; i < size; i++) {result[i] = stack.pop().val;}return result;}public static void recurrence(ListNode node){if(node != null){stack.push(node);recurrence(node.next);}}
}

解法二 辅助栈

  1. 根据头节点(对象)的next节点属性可以得到所有的节点
  2. 将节点中所有的值放入辅助栈中(栈先进后出
  3. 初始化一个int[]数组,将栈中的元素弹出并放入数组
/*** Definition for singly-linked list.* public class ListNode {*     int val;*     ListNode next;*     ListNode(int x) { val = x; }* }*/
class Solution {public int[] reversePrint(ListNode head) {// 声明一个栈Stack<ListNode> stack = new Stack<ListNode>();// 将数据压如栈中ListNode temp = head;while (temp != null) {stack.push(temp);temp = temp.next;}int size = stack.size();// 声明返回的数组int[] result = new int[size];// 遍历栈,弹出for (int i = 0; i < size; i++) {result[i] = stack.pop().val;}return result;}
}

image.png

总结

这道题作为链表类型的入门题目是非常适合的,推荐没刷过算法的,链表从这道题开始。新手需要注意的是这里的Node是个对象,对象里有一个Node属性代表的是它的下一个节点,实在理解不了的你就把入参看成一个链表。
请添加图片描述

这篇关于大厂常见算法50题-图书整理(从头到尾打印链表)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/959790

相关文章

python常见环境管理工具超全解析

《python常见环境管理工具超全解析》在Python开发中,管理多个项目及其依赖项通常是一个挑战,下面:本文主要介绍python常见环境管理工具的相关资料,文中通过代码介绍的非常详细,需要的朋友... 目录1. conda2. pip3. uvuv 工具自动创建和管理环境的特点4. setup.py5.

java中long的一些常见用法

《java中long的一些常见用法》在Java中,long是一种基本数据类型,用于表示长整型数值,接下来通过本文给大家介绍java中long的一些常见用法,感兴趣的朋友一起看看吧... 在Java中,long是一种基本数据类型,用于表示长整型数值。它的取值范围比int更大,从-922337203685477

MyBatis Plus 中 update_time 字段自动填充失效的原因分析及解决方案(最新整理)

《MyBatisPlus中update_time字段自动填充失效的原因分析及解决方案(最新整理)》在使用MyBatisPlus时,通常我们会在数据库表中设置create_time和update... 目录前言一、问题现象二、原因分析三、总结:常见原因与解决方法对照表四、推荐写法前言在使用 MyBATis

Linux链表操作方式

《Linux链表操作方式》:本文主要介绍Linux链表操作方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、链表基础概念与内核链表优势二、内核链表结构与宏解析三、内核链表的优点四、用户态链表示例五、双向循环链表在内核中的实现优势六、典型应用场景七、调试技巧与

详解Linux中常见环境变量的特点与设置

《详解Linux中常见环境变量的特点与设置》环境变量是操作系统和用户设置的一些动态键值对,为运行的程序提供配置信息,理解环境变量对于系统管理、软件开发都很重要,下面小编就为大家详细介绍一下吧... 目录前言一、环境变量的概念二、常见的环境变量三、环境变量特点及其相关指令3.1 环境变量的全局性3.2、环境变

MySQL复杂SQL之多表联查/子查询详细介绍(最新整理)

《MySQL复杂SQL之多表联查/子查询详细介绍(最新整理)》掌握多表联查(INNERJOIN,LEFTJOIN,RIGHTJOIN,FULLJOIN)和子查询(标量、列、行、表子查询、相关/非相关、... 目录第一部分:多表联查 (JOIN Operations)1. 连接的类型 (JOIN Types)

Java中常见队列举例详解(非线程安全)

《Java中常见队列举例详解(非线程安全)》队列用于模拟队列这种数据结构,队列通常是指先进先出的容器,:本文主要介绍Java中常见队列(非线程安全)的相关资料,文中通过代码介绍的非常详细,需要的朋... 目录一.队列定义 二.常见接口 三.常见实现类3.1 ArrayDeque3.1.1 实现原理3.1.2

MyBatis设计SQL返回布尔值(Boolean)的常见方法

《MyBatis设计SQL返回布尔值(Boolean)的常见方法》这篇文章主要为大家详细介绍了MyBatis设计SQL返回布尔值(Boolean)的几种常见方法,文中的示例代码讲解详细,感兴趣的小伙伴... 目录方案一:使用COUNT查询存在性(推荐)方案二:条件表达式直接返回布尔方案三:存在性检查(EXI

Python struct.unpack() 用法及常见错误详解

《Pythonstruct.unpack()用法及常见错误详解》struct.unpack()是Python中用于将二进制数据(字节序列)解析为Python数据类型的函数,通常与struct.pa... 目录一、函数语法二、格式字符串详解三、使用示例示例 1:解析整数和浮点数示例 2:解析字符串示例 3:解

MySQL查看表的最后一个ID的常见方法

《MySQL查看表的最后一个ID的常见方法》在使用MySQL数据库时,我们经常会遇到需要查看表中最后一个id值的场景,无论是为了调试、数据分析还是其他用途,了解如何快速获取最后一个id都是非常实用的技... 目录背景介绍方法一:使用MAX()函数示例代码解释适用场景方法二:按id降序排序并取第一条示例代码解