zoukankan      html  css  js  c++  java
  • 剑指offer(三) 从尾到头打印链表

    题目描述
    输入一个链表,从尾到头打印链表每个节点的值。

    这个其实我才出题人是想考察递归的,但是做法可以直接另开个数组,遍历链表的时候push链表val值,最后reverse即可。

    但是递归方法更加优美啊,通过递归进入链表底部,从下往上push,其实就是用递归模拟了栈的思想,我一直认为栈就是用迭代来模拟递归的过程。那么递归可以做,栈肯定也就可以做这道题。

    为了巩固JS,以后刷题尽量使用JS吧。
    注意牛客OJ这道题JS递归法是跑不出来的,牛客剑指offr板块是模拟的leetcode,OJ不允许在函数外添加代码,但是你必须要开一个数组在函数外,本地结果是对的。

    我用了三种方法:

    递归:

    var arr = new Array();
    function printListFromTailToHead(head)
    {
        if(head==null)
            return arr;
        printListFromTailToHead(head.next);
        arr.push(head.val);
        return arr;
    }
    

    传统:

    function printListFromTailToHead(head)
    {
        var arr = new Array();
        if(head!=null) {
            var cur = head;
            while(cur) {
                arr.push(cur.val);
                cur = cur.next;
            }
        }
        arr = arr.reverse();
        return arr;
    }
    

    unshift方法:

    function printListFromTailToHead(head) {
        // write code here
        var res = [], pNode = head;
        while (pNode != null) {
            res.unshift(pNode.val);
            pNode = pNode.next;
        }
        return res;
    }
    

    测试:

    function ListNode(x){
        this.val = x;
        this.next = null;
    }
    
    function init(linklist,array) {
        linklist = new ListNode(array[0])
        var cur = linklist;
        var len = array.length;
        for(var i = 1; i < len; i++) {
            var tmp = new ListNode(array[i]);
            cur.next = tmp;
            cur = cur.next;
        }
        return linklist;
    }
    
    function printListFromTailToHead(head)
    {
        var arr = new Array();
        if(head!=null) {
            var cur = head;
            while(cur) {
                arr.push(cur.val);
                cur = cur.next;
            }
        }
        arr = arr.reverse();
        return arr;
    }
    
    var linklist;
    var array = new Array(1,2,3,4);
    linklist = init(linklist,array);
    console.log(linklist);
    console.log(printListFromTailToHead(linklist));
    
    
  • 相关阅读:
    C# 图片与Base64的相互转化
    LeetCode 303. Range Sum Query – Immutable
    LeetCode 300. Longest Increasing Subsequence
    LeetCode 292. Nim Game
    LeetCode 283. Move Zeroes
    LeetCode 279. Perfect Squares
    LeetCode 268. Missing Number
    LeetCode 264. Ugly Number II
    LeetCode 258. Add Digits
    LeetCode 257. Binary Tree Paths
  • 原文地址:https://www.cnblogs.com/zhangmingzhao/p/8109629.html
Copyright © 2011-2022 走看看