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

网站开发三端指哪三端扬中网站建设好么

网站开发三端指哪三端,扬中网站建设好么,网站免费建立,wordpress更换帝国题目链接: https://leetcode.cn/problems/cong-wei-dao-tou-da-yin-lian-biao-lcof/ 1. 题目介绍(06. 从尾到头打印链表) 输入一个链表的头节点,从尾到头反过来返回每个节点的值(用数组返回)。 【测试用例…

题目链接: https://leetcode.cn/problems/cong-wei-dao-tou-da-yin-lian-biao-lcof/

1. 题目介绍(06. 从尾到头打印链表)

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

【测试用例】:
示例 1:

输入:head = [1,3,2]
输出:[2,3,1]

【条件约束】:

0 <= 链表长度 <= 10000

2. 题解

2.1 辅助栈(后进先出)-- O(n)

时间复杂度:O(n),空间复杂度:O(n)

/*** Definition for singly-linked list.* public class ListNode {*     int val;*     ListNode next;*     ListNode(int x) { val = x; }* }*/
class Solution {public int[] reversePrint(ListNode head) {// 1. 创建一个栈用来从前向后存储链表Stack<ListNode> stack = new Stack<>();// 2. 创建一个ListNode对象,指向head节点ListNode node = head;// 3. 将链表节点依次压栈while (node != null){stack.push(node);// System.out.println(node.val);node = node.next;}// 4. 创建一个int数组,记录从后向前弹出的链表节点值int[] arr = new int[stack.size()];// 5. 弹出并将栈内数据存入数组for (int i = 0; i < arr.length; i++){arr[i] = stack.pop().val;}// 6. 循环结束,返回数组return arr;}
}

在这里插入图片描述

2.2 递归 – O(n)

时间复杂度:O(n),空间复杂度:O(n)

代码来自于StackOverflow~在面试题06. 从尾到头打印链表中的Comment.

/*** Definition for singly-linked list.* public class ListNode {*     int val;*     ListNode next;*     ListNode(int x) { val = x; }* }*/
class Solution {// 1. 定义数组,用于后续的返回int[] res;public int[] reversePrint(ListNode head) {// 2. 递归调用backtrack(head,0);// 6. 返回最终结果return res;}public int backtrack(ListNode node, int length){// 3. 如果当前节点为null,说明走到了最后,创建数组if(node==null){res = new int[length];return 0;}int index = backtrack(node.next,length+1);// 4. 递归到最深层后,依次返回并赋值res[index] = node.val;// 5. 返回索引+1,用于移动当前数组下标return index+1;}
}

在这里插入图片描述

2.3 两次暴力遍历 – O(n)

时间复杂度:O(n),空间复杂度:O(n)

代码参考于 TJ. xiong 的 剑指 Offer 06. 从尾到头打印链表.

/*** Definition for singly-linked list.* public class ListNode {*     int val;*     ListNode next;*     ListNode(int x) { val = x; }* }*/
class Solution {public int[] reversePrint(ListNode head) {// 1. 创建一个ArrayList集合ArrayList<Integer> integers = new ArrayList<>();// 2. 循环遍历,将链表节点值加入集合while (head != null) {integers.add(head.val);head = head.next;}// 3. 创建一个数组int[] ints = new int[integers.size()];// 4. 循环遍历,将ArrayList中的数据倒序存入int数组中for (int i = 0; i < ints.length; i++) {ints [i] = integers.get(ints.length - 1 - i);}// 5. 循环结束,返回数组return ints;}    
}

在这里插入图片描述

3. 思考

虽然三种方法的时间复杂度和空间复杂度都是O(n),但是还是比较推荐使用栈(Stack)来实现。使用递归会存在一个问题,那就是:当链表非常长的时候,就会导致函数调用的层级很深,从而有可能导致函数调用栈溢出。

4. 参考资料

[1] Java Stack 类
[2] 面试题06. 从尾到头打印链表
[3] 剑指 Offer 06. 从尾到头打印链表

http://www.yayakq.cn/news/405657/

相关文章:

  • 郑州网站建站网站怎么样做企业商城网站要多少钱
  • 网站 业务范围做网站的时候遇到的问题
  • 网站关键词被百度屏蔽怎么办SEO案例网站建设
  • 网站的头尾和导航的公用文件营销网站建设联系方式
  • 永兴城乡住房建设部网站天津做推广的公司
  • 网站 备案 拍照重庆市建筑工程信息网官网
  • 简洁大气企业网站源码网络宣传的方法有哪些
  • 外贸网站交易平台如何在微信内做网站
  • 怎样选择网站建设公司晋城建设路网站
  • 关键词排名优化软件策略东莞百度seo哪家好
  • 重庆帝一网络网站建设专家企业网页制作教程和流程
  • 网站幻灯片效果代码苏州做网站设计的公司
  • 江西省上饶市建设局网站wordpress群发
  • 眉山网站优化网站暂时关闭 seo
  • 怎么免费建设网站如何建立一家公司网站
  • 外贸网站建设需要多少钱反邪手机网站建设方案
  • 企业做网站设置哪些模块建筑资料哪个网最全
  • 长沙网站建设公司排行榜wordpress 分类 列表页
  • 申请网站的域名一个简单鲜花的html网页
  • 做网站是怎么赚钱吗烟台建设信息网站
  • 黑龙江省建设安全协会网站wordpress怎么二次开
  • 青浦华新网站建设长沙建筑模板厂家
  • 如何做网站建设方案怎么修改网站默认首页
  • 上海建设银行官网网站网页在线代理翻墙
  • 长沙河西做网站企业主体负责人和网站负责人
  • 上海网站建设推广河北百度推广seo
  • wordpress如何备份 网站网站已运行时间代码
  • 营销做网站公司汽车之家app下载最新版
  • 网站运营与管理规划书网络营销策划书的类型
  • 有没有给别人做图赚钱的网站做网站大优惠