JavaScript算法系列之-----------------链表反转(JS实现)

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

之前一直对JS实现链表理解不了,被算法大牛指点了一下豁然开朗。

function ListNode(x){
    this.val = x;
    this.next = null;
}

在JS中,this.val代表当前节点的值,this.next指向下一个节点,若this.next为null(对象),则说明该节点为链表的最后一个节点。

PS:把下一个节点赋值给当前对象的next属性,通过这样的方式连接。

通过代码:

function printListFromTailToHead(head)
{
    let arr = [];
    let start = head;
    while(start){
        arr.push(start.val);
        start = start.next;
    }
    return arr.reverse();
}

原文地址:https://www.cnblogs.com/manru75/p/10389088.html

时间: 2024-07-31 15:32:39

JavaScript算法系列之-----------------链表反转(JS实现)的相关文章

Leetcode算法系列(链表)之两数相加

Leetcode算法系列(链表)之两数相加 难度:中等给出两个 非空 的链表用来表示两个非负的整数.其中,它们各自的位数是按照 逆序 的方式存储的,并且它们的每个节点只能存储 一位 数字.如果,我们将这两个数相加起来,则会返回一个新的链表来表示它们的和.您可以假设除了数字 0 之外,这两个数都不会以 0 开头.示例:输入:(2 -> 4 -> 3) + (5 -> 6 -> 4)输出:7 -> 0 -> 8原因:342 + 465 = 807 链接:https://le

Javascript算法系列之快速排序(Quicksort)

Javascript算法系列之快速排序(Quicksort) 原文出自: http://www.nczonline.net/blog/2012/11/27/computer-science-in-javascript-quicksort/ https://gist.github.com/paullewis/1981455#file-gistfile1-js 快速排序(Quicksort)是对冒泡排序的一种改进,是一种分而治之算法归并排序的风格 核心的思想就是通过一趟排序将要排序的数据分割成独立的

JavaScript算法系列之-----------------斐波那契数列(JS实现)

题目描述 大家都知道斐波那契数列,现在要求输入一个整数n,请你输出斐波那契数列的第n项(从0开始,第0项为0). n<=39 递归实现: function Fibonacci(n){ if(n<0){ return -1; } if(n===0){ return 0; } if(n===1){ retunr 1; } if(n>1){ return Fibonacci(n-1)+Fibonacci(n-2); } } 递归实现效率较低,未能编译通过. 正常实现: function Fib

JavaScript算法系列之-----------------跳台阶(JS实现)

题目描述 一只青蛙一次可以跳上1级台阶,也可以跳上2级.求该青蛙跳上一个n级的台阶总共有多少种跳法(先后次序不同算不同的结果). 思路: (1)跳一级台阶 : 1             一种 (2)跳二级台阶 : 11/2        两种 (3)跳三级台阶 : 先跳一级还有两级台阶同情况(2)  记作=>    1 (2) 先跳两级还有一级台阶同情况(1)  记作=>    2 (1) 把这两种情况加起来就是跳三级台阶的一共可能 (2)+(1) (4)跳四级台阶 : 先跳一级还有三级台阶

JavaScript算法系列之-----------------变态跳台阶(JS实现)

题目描述 一只青蛙一次可以跳上1级台阶,也可以跳上2级……它也可以跳上n级.求该青蛙跳上一个n级的台阶总共有多少种跳法. 思路:其实和跳台阶思路很像, (1)跳一级台阶 : 1             一种 (2)跳二级台阶 : 11/2        两种 (3)跳三级台阶 : 先跳一级还有两级台阶同情况(2)  记作=>    1 (2) 先跳两级还有一级台阶同情况(1)  记作=>    2 (1) 先跳三级台阶情况                             记作=>

数据结构与算法系列:链表

链表定义: 1 // 链表结点 2 struct ListNode 3 { 4 int m_nValue; 5 ListNode* m_pNext; 6 }; 常见问题: #include <iostream> #include <stack> // 输入数据 int Read() { int value; std::cin >> value; return value; } // 创建链表 ListNode* CreateList(int nLen) { ListNo

【常用算法思路分析系列】链表相关高频题集

本文是[常用算法思路分析系列]的第四篇,总结链表相关的高频题目和解题思路.本文分析如下几个问题:1.环形链表的差值问题:2.只能访问单个结点的删除问题:3.链表的分化:4.打印两个链表的公共部分:5.把链表的每k个结点逆序:6.删除链表中指定结点:7.判断链表是否为回文结构:8.复杂链表的复制:9.判断链表是否有环:10.判断两个无环链表是否相交:11.判断两个有环链表是否相交:12.判断两个链表(状态未定)是否相交. 本系列前三篇导航: [常用算法思路分析系列]排序高频题集 [常用算法思路分析

单向链表反转算法——递归版和迭代版

最近在做笔试题时,遇到一道编程题:单向链表反转算法.一时紧张,没写出来就提前交卷了,然而交完卷就想出来了... 最初想出来的是递归版,遗憾的是没能做到尾递归,后来又琢磨出了迭代版.后来用实际编译运行测试了一遍,能正常运行. 递归版的灵感来源于<Haskell 趣学指南>中非常简洁的快速排序算法的实现,其思想是将单向链表分割头部和尾部.其中头部指是链表的第一个节点,尾部是指除去第一个节点后的子链表.通过递归的方法,将子链表继续分割成头部和尾部,直至尾部指剩下一个节点,无法继续分割,然后将头部和尾

数据结构和算法之单向链表六:链表的反转以及链表节点的删除

在前面介绍了关于链表的一系列问题,这里我们在介绍一下关于单向链表的反转这个比较具有代表性的算法.在进行反转的时候一定要记住多画图,多去理解在链表进行反转的时候它对于地址的改变,这和数组的数据对换具有很大的不一致. public Node reverseList(Node head){ //判断链表是否为空或者只有一个节点 if(head == null || head.next == null){ return head; } //准备三个节点 Node next = null;//保存当前节点