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

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

时间:2023-01-31 12:22:07浏览次数:40  
标签:head ListNode val temp Offer int res 链表 06

题目:

思路:

【1】本质上,递归,辅助栈都是可以实现的方法,但是相比于递归,如果能用循环解决的话我更喜欢循环,因为递归也是需要消耗内存空间的,而且本质上其实只需要知道链表大小其实就很好做了,数据从后面往前面填充即可。

代码展示:

//时间4 ms击败4.55%
//内存42 MB击败52.97%
//借助额外辅助空间的做法
/**
 * Definition for singly-linked list.
 * public class ListNode {
 *     int val;
 *     ListNode next;
 *     ListNode(int x) { val = x; }
 * }
 */
class Solution {
    public int[] reversePrint(ListNode head) {
       ArrayList<Integer> ints = new ArrayList<>();
        while (head != null){
            ints.add(0,head.val);
            head = head.next;
        }
        int[] res = new int[ints.size()];
        for (int i = 0; i < ints.size(); i++){
            res[i] = ints.get(i);
        }
        return res;
    }
}

//时间0 ms击败100%
//内存41.7 MB击败95.81%
//不借助辅助空间
/**
 * Definition for singly-linked list.
 * public class ListNode {
 *     int val;
 *     ListNode next;
 *     ListNode(int x) { val = x; }
 * }
 */
class Solution {
    public int[] reversePrint(ListNode head) {
        ListNode temp = head;
        int count = 0;
        while (temp != null){
            count++;
            temp = temp.next;
        }
        int[] res = new int[count];
        temp = head;
        while (temp != null){
            res[--count] = temp.val;
            temp = temp.next;
        }
        return res;
    }
}

 

标签:head,ListNode,val,temp,Offer,int,res,链表,06
From: https://www.cnblogs.com/chafry/p/17078575.html

相关文章

  • 读Java8函数式编程笔记06_Lambda表达式编写并发程序
    1. 阻塞式I/O1.1. 一种通用且易于理解的方式,因为和程序用户的交互通常符合这样一种顺序执行的方式1.2. 将系统扩展至支持大量用户时,需要和服务器建立大量TCP连接,因此......
  • 06-逻辑代数
    逻辑代数逻辑函数中的变量只有0和1两组取值一、逻辑代数的基本定律和恒等式可以将01带入,方便记忆和思考A+A=AA*A=A(重叠律)A+A'=1A*A'=0反演律就是摩......
  • 双向链表
    双向链表单链表查找某结点的后继结点的执行时间为O(1);单链表查找某结点的后继结点的执行时间为O(n)在单链表的每个结点里再增加一个指向其直接前驱的指针域prior,这样链......
  • CF1067E 题解
    题意传送门给定一棵\(n\)个节点的树,每条边有\(\frac{1}{2}\)的概率出现,可以得到一个森林,求这个森林邻接矩阵的秩的期望。\(1\len\le5\times10^5\)。题解此题关键......
  • LeetCode 删除链表的倒数第 N 个结点(/)
    原题解题目给你一个链表,删除链表的倒数第n个结点,并且返回链表的头结点。约束题解方法一classSolution{public:intgetLength(ListNode*head){......
  • Redis的设计与实现(2)-链表
    链表在Redis中的应用非常广泛,比如列表键的底层实现之一就是链表:当一个列表键包含了数量比较多的元素,又或者列表中包含的元素都是比较长的字符串时,Redis就会使用......
  • 单链表的倒数第 k 个节点
    /***单链表的倒数第k个节点*/constlinkList={value:1,next:{value:2,next:{value:3,next:{......
  • 单向链表利用快慢指针
    /***单链表的中点*/constmiddleNode=(node=linkList)=>{letslow=node,fast=node;while(fast&&fast.next){slow=slow.next......
  • 循环链表
    循环链表一种头尾相接的链表,表中最后一个结点的指针域指向头结点,整个链表形成一个环即没有NULL指针,因此遍历操作时,终止条件是否等于头指针优:从表中任一结点出发,均可找到......
  • 1669. 合并两个链表
    1669.合并两个链表題解:模拟链表操作/***Definitionforsingly-linkedlist.*publicclassListNode{*intval;*ListNodenext;*ListNode......