从尾到头打印链表

题目:输入一个链表的头节点,从尾到头反过来打印出每个节点的值。
链表数据结构:

function ListNode(val) {
    this.val = val;
    this.next = null;
}
解法一:反转链表后正序打印。
var printListReversingly = function(head) {
    var prevNode = null,
          currNode = head,
          tmpNode;
    while(currNode != null){   //反转链表
          tmpNode = currNode.next;
          currNode.next = prevNode;
          prevNode = currNode;
          currNode = tmpNode;   
    }
    pNode = prevNode;   //遍历反转链表
    while(pNode != null){
          console.log(pNode.val);
          pNode = pNode.next;
    }
}
解法二:遍历链表,将节点推入栈中。当遍历完节点后,从栈顶开始逐个输出节点的值。
var printListReversingly = function(head) {
    var pNode = head,
        pStack = new Array();  //基于数组实现栈
    while(pNode != null){
        pStack.push(pNode);  //遍历节点入栈
        pNode = pNode.next;
    }
    while(pStack.length != 0){
        console.log(pStack.pop().val);  //从栈顶出栈
    }
};
解法三:递归。先输出后一个节点的值,再输出当前节点自身的值。
var printListReversingly = function(head) {
    if(head != null){
        if(head.next != null){
            printListReversingly(head.next);
        }
        console.log(head.val);
    }
};

缺点:当链表非常长的时候,会导致函数调用层级很深,从而有可能导致函数调用栈溢出。

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 接秋霜,卷西风,大雪蛇归洞。 叶飘零,树还青,江涛隔岸斗寒冰。 河谷闻春令。 注:押《中华新韵第十一部一十一庚阴平中》
    木貞ma阅读 436评论 1 5
  • 不是你的就别再勉强
    zazzhxq阅读 164评论 0 0
  • 上午 扔妙妙的东西三次,扔浩浩的东西一次 拧妙妙的胳膊1次,拧浩浩的胳膊5次, 忽略浩浩鼻子中塞卫生纸两次, 提醒...
    范兰英阅读 277评论 1 4
  • “离离原上草,一岁一枯荣。野火烧不尽,春风吹又生。”小草的生命如此顽强,即使再恶劣的环境,它也能生存下去。 ...
    方同學_阅读 382评论 0 0
  • 这几天,因为天气太热,加之身上又来事儿了,所以就没去店里干活儿。 可就在昨天,老公的二姑从青岛回来...
    梅香树影阅读 312评论 1 4

友情链接更多精彩内容