首页 > 其他分享 >力扣---剑指 Offer 06. 从尾到头打印链表

力扣---剑指 Offer 06. 从尾到头打印链表

时间:2023-03-18 21:57:33浏览次数:45  
标签:--- ListNode val temp int res len 链表 06

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

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

限制:
0 <= 链表长度 <= 10000
来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/cong-wei-dao-tou-da-yin-lian-biao-lcof
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。


 

很容易就能想到利用栈的先进后出特点来解决。

由于不论怎样,都需要遍历两次:一次得到长度,一次填入值(这是由于Java数组长度不可变制定的,如果是Python等数组长度可变的语言,只需要遍历一次即可),似乎没有必要再去用额外空间来存储。

栈:

/**
 * Definition for singly-linked list.
 * public class ListNode {
 *     int val;
 *     ListNode next;
 *     ListNode(int x) { val = x; }
 * }
 */
class Solution {
    public int[] reversePrint(ListNode head) {
        Deque<Integer> stack = new LinkedList<>();
        ListNode temp = head;
        while (temp != null) {
            stack.push(temp.val);
            temp = temp.next;
        }
        int len = stack.size();
        int[] res = new int[len];
        for (int i = 0; i < len; i++) {
            res[i] = stack.pop();
        }
        return res;
    }
}

 

优化(其实也不算优化,回归最原始的暴力罢了):

/**
 * Definition for singly-linked list.
 * public class ListNode {
 *     int val;
 *     ListNode next;
 *     ListNode(int x) { val = x; }
 * }
 */
class Solution {
    public int[] reversePrint(ListNode head) {
        int len = 0;
        ListNode temp = head;
        while (temp != null) {
            len ++;
            temp = temp.next;
        }
        int[] res = new int[len];
        temp = head;
        for (int i = len - 1; i >= 0; i--) {
            res[i] = temp.val;
            temp = temp.next;
        }
        return res;
    }
}

 

标签:---,ListNode,val,temp,int,res,len,链表,06
From: https://www.cnblogs.com/allWu/p/17231913.html

相关文章

  • 数据结构-绪论
    -本文参考于2024年的王道考研计算机的复习指导。-仅供学习交流,如侵权,即删。-本系列地址:https://www.cnblogs.com/kohler21/category/2289027.html目录第一章绪论数......
  • leetcode-05 最长回文子串
    题目描述:给你一个字符串 s,找到 s 中最长的回文子串。解法一:中心扩散法思想:令左右指针指向同一个元素,然后向两边扩散,并记录下最长长度(L)以及对应的起始位置(index)......
  • Redis-超卖问题
    悲观锁:简单粗暴,性能一般。认为线程安全一定会发生,在操作数据之前获取锁,确保线程串行执行。Synchronized。Lock都属于悲观锁 乐观锁,性能较好。认为线程安全问题不一定......
  • 学习笔记-电力电子器件
    绪论电力电子技术与信息电子技术的重要区别:信息电子技术中半导体器件既可以处于放大状态,也可以处于开关状态;电力电子技术中,为避免损耗功率过大,电力电子器件总是工作在开关......
  • 【230318-4】已知正数a,b满足2a+b=1,则4a^2+b^2+4倍根号下ab的最大值为?
    ......
  • 【230318-5】已知正实数a,b满足ab(a+b)=4,则2a+b的最小值为?
    ......
  • 数据结构-布隆过滤器
    1.布隆过滤器的概念定义布隆过滤器:是⼀种概率型数据结构,特点是⾼效的插⼊和查询,能明确告知某个字符串⼀定不存在或者可能存在;优点和缺点优点:布隆过滤器相⽐传......
  • 力扣---1616. 分割两个字符串得到回文串
    给你两个字符串a和b,它们长度相同。请你选择一个下标,将两个字符串都在相同的下标分割开。由a可以得到两个字符串:aprefix和asuffix,满足a=aprefix+asuffix,......
  • LARGER LANGUAGE MODELS DO IN-CONTEXT LEARNING DIFFERENTLY
    我们研究了语言模型中的上下文学习(ICL)如何受到语义先验和输入标签映射的影响。我们在不同的模型族(GPT-3、InstructGPT、Codex、PaLM和Flan-PaLM)中研究了两种设置—带有......
  • 创建typescript(-node)项目
    创建一个项目mkdirdemocddemonpminit-y安装ts相关依赖//ts-node可以用来直接运行.ts文件建议全局安装npminstall-gts-node//@types/node是NodeJs的类型......