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#、C++和Java优劣
    XML数据流主动服务系统的设计与实现
    ASP.NET 状态管理
    Oracle中如何从BasicFile迁移到SecureFile
    让UpdatePanel支持上传文件
    C#和Visual Basic渐行渐远之匿名类型
    wpf 移动变换
    WPF 样式学习总结
    临江仙
    wpf 动画效果
  • 原文地址:https://www.cnblogs.com/zhangmingzhao/p/8109629.html
Copyright © 2011-2022 走看看