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));
    
    
  • 相关阅读:
    Window 窗口类
    使用 Bolt 实现 GridView 表格控件
    lua的table库
    Windows编程总结之 DLL
    lua 打印 table 拷贝table
    使用 xlue 实现简单 listbox 控件
    使用 xlue 实现 tips
    extern “C”
    COleVariant如何转换为int double string cstring
    原来WIN32 API也有GetOpenFileName函数
  • 原文地址:https://www.cnblogs.com/zhangmingzhao/p/8109629.html
Copyright © 2011-2022 走看看