博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【剑指offer】3.从尾到头打印链表
阅读量:6870 次
发布时间:2019-06-26

本文共 2301 字,大约阅读时间需要 7 分钟。

题目描述

输入一个链表,按链表值从尾到头的顺序返回一个ArrayList。

分析

要了解链表的数据结构:

val属性存储当前的值,next属性存储下一个节点的引用。

要遍历链表就是不断找到当前节点的next节点,当next节点是null时,说明是最后一个节点,停止遍历。

最后别忘了,从尾到头遍历链表,不要忘了将你的结果进行翻转。

代码

/*function ListNode(x){    this.val = x;    this.next = null;}*/function printListFromTailToHead(head){    const result = [];    let temp = head;    while(temp){        result.push(temp.val);        temp = temp.next;    }    return result.reverse();}

拓展

链表定义:用一组任意存储的单元来存储线性表的数据元素。

一个对象存储着本身的值和下一个元素的地址。

需要遍历才能查询到元素,查询慢。

插入元素只需断开连接重新赋值,插入快。

function LinkList(){            function node(element){                this.value = element;                this.next = null;            }            let length = 0;            let head = null;        }        LinkList.prototype = {            // 追加            append:function(element){                var node = new node(element);                var temp = this.head;                if(this.head){                    //遍历找到链表的终点                    while(temp.next){                        temp = temp.next;                    }                    temp.next = node;                }else{                    this.head = node;                }                this.length++;            },            // 插入            insert:function(element,index){                if(index <= this.length && index>0){                    var node = new node(element);                    var currentIndex = 0;                    var currentNode = this.head;                    var preNode = null;                    if (currentIndex === 0) {                        node.next = currentNode;                        this.head = node;                        return;                    }                    while(currentIndex

链表翻转

把初始链表头当做基准点

移动下一个元素到头部

直到下一个元素为空

/**     * Definition for singly-linked list.     * function ListNode(val) {     *     this.val = val;     *     this.next = null;     * }     */    /**     * @param {ListNode} head     * @return {ListNode}     */    var reverseList = function (head) {      let currentNode = null;      let headNode = head;      while (head && head.next) {        // 将当前节点从链表中取出        currentNode = head.next;        head.next = currentNode.next;        // 将取出的节点移动到头部        currentNode.next = headNode;        headNode = currentNode;      }      return headNode;    };

转载地址:http://slpfl.baihongyu.com/

你可能感兴趣的文章
react项目中使用mocha结合chai断言库进行单元测试
查看>>
css3动画
查看>>
Spring Boot 单元测试二三事
查看>>
电脑中播放的声音怎么在线录制
查看>>
微信小程序开发心得
查看>>
nfs
查看>>
Angular vs React 最全面深入对比
查看>>
containerd项目正式从CNCF毕业
查看>>
中台之上(十二):如何快速设计业务架构?
查看>>
C#的未来:托管指针
查看>>
微软发布UWP Bridge项目将一切应用转为Windows应用
查看>>
语义鸿沟、异构鸿沟、数据缺失,多模态技术如何跨过这些坎?
查看>>
与广告“互动”—情景互动式创意广告
查看>>
使用外部表查看ORACLE报警日志
查看>>
业务发展如何利用创新驱动力量?
查看>>
云数据加密公司LOCKet获千万级Pre-A融资
查看>>
爱尔兰WElink Energy宣布在葡萄牙建立220MW太阳能光伏项目
查看>>
如何从敏捷到精益地修复bug与解决问题
查看>>
开启智慧新生活 新余市智慧城市建设全省率先
查看>>
智慧东湖让城市慢游更幸福
查看>>