zoukankan      html  css  js  c++  java
  • 剑指Offer 06.从尾到头打印链表

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

    示例 1:

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

    思路:一开始想的是:用一个List ,动态的记录链表节点的值,但是 List 每一次 add( n ) 耗时太久,而且最后 List 转为 int[ ] 页不方便。

    改进思路:利用 2 次遍历,来换取 List 存值、以及最后取值放入 int[ ] 的开销。

    class Solution {
        public int[] reversePrint(ListNode head) {
            ListNode tmp = head;
            int count = 0;
            while(tmp != null){
                count++; // 第一次遍历,得到链表节点的个数
                tmp = tmp.next;
            }
            int[] res = new int[count]; //申请同样大小的数组
            while(head != null){
                res[--count] = head.val; // 第二次遍历,往数组里面记录值
                head = head.next;
            }
            return res;
        }
    }

      

     从时间上来看,多遍历一次还是划算的。

  • 相关阅读:
    创新工场 笔试1
    C++的异常处理
    阿里笔试题2
    阿里笔试题1
    控制CPU占用率曲线
    再探结构体字节对齐问题
    1401
    pancake sort的几个问题
    CF198 D2
    谨慎设计一个单例类
  • 原文地址:https://www.cnblogs.com/luo-c/p/13648220.html
Copyright © 2011-2022 走看看