从尾到头打印链表

剑指offer-牛客网

Posted by Y. on October 25, 2018

从尾到头打印链表

题目描述

输入一个链表,按链表值从尾到头的顺序返回一个ArrayList。
时间限制:1秒 空间限制:32768K

思路

遍历链表初始化新的array,反转数组得到结果。

代码

/*function ListNode(x){
    this.val = x;
    this.next = null;
}*/
function printListFromTailToHead(head)
{
    // write code here
    var pointer = head;
    var result = [];
    var i = 0;
    
    while(pointer != null) {
        result[i] = pointer.val;
        i++;
        pointer = pointer.next;
    }
    var lengthOfResult = result.length;
    for(var i = 0; i <= Math.floor((lengthOfResult - 1) / 2); i++) {
        let middle_value = result[i];
        result[i] = result[lengthOfResult - i - 1];
        result[lengthOfResult - i - 1] = middle_value;
    }
    
    return result;
}

运行时间:14ms
占用内存: 5308k

问题

  1. 链表的实现方式

最优解题思路

replace函数

代码

/*function ListNode(x){
    this.val = x;
    this.next = null;
}*/
function printListFromTailToHead(head)
{
    // write code here
    var arr=[];
    var me=head;
    while(me){
        arr.push(me.val);
        me=me.next;
    }
    return arr.reverse();
}

运行时间:9毫秒
占用内存:5176k

注:

  1. reverse()函数