• 剑指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));
    
    
  • 相关阅读:
    访问系统内容提供器,获取联系人列表
    ubuntu下查看IP Gateway DNS信息
    使用fragment,Pad手机共用一套代码
    动态注册广播接收器,监听网络变化
    启动Activity,传递参数最佳实践
    管理Activity,随时随地控制Activity的销毁工作
    unzip解压中文文件名乱码
    mysql null值转换
    (转)使用scp命令在linux操作系统之间传递文件
    比较两个日期的大小
  • 原文地址:https://www.cnblogs.com/zhangmingzhao/p/8109629.html
Copyright © 2020-2023  润新知