首页 > 其他分享 >js 链路表和反向链路

js 链路表和反向链路

时间:2023-07-01 11:11:23浏览次数:40  
标签:nextNode currNode value next 反向 链路 let js preNode

 

/**
 *  数组转链路表数据 - {value: A, next: {value: B, next: {value: C}}
 * @param {*} list arr
 * @returns 
 */
function createLink(list) {
  let length = list.length;
  // 最后一级,没有next
  let currNode = {
    value: list[length - 1],
  };
  // [1,2,3,4,5];
  //4.next = 5, 5没有下一级
  // 从最后二个元素反向遍历,倒数第二元素的next 就是 上面的currNode, 然后当前对象重新赋值给 外面的currNode,依次遍历完,
  // 倒数第二next 是最后一级,倒数第三next 是倒数第二,依次类推
  for(let i = length - 2; i >= 0; i --) {
    currNode = {
      value: list[i],
      next: currNode
    }
  }
  return currNode;
}

 

/**
 * 反向链表  把 {value: A, next: {value: B, next: {value: C}}, ---> 转成 {value: C, next: {value: B, next: {value: A}}
 * 
 * @param {*} data object
 */
function unLink(data) {
  let currNode;
  let preNode;
  let nextNode = data;
  while (nextNode) {
    // 第一层级的时候,删掉next, 因为数据转换出来,第一层级是最后一级,没有next,且会造成循环引用
    if (!preNode && currNode) {
      delete currNode.next;
    }
    // currNode 
    if (currNode && preNode) {
      currNode.next = preNode;
    }
    /**  数据移动规则 [p = c; c = n; n = c.next] p: preNode, c:currNode, n: nextNode
     *       A   B   C
     * p  c  n          第一轮完 p 是空的, c = A, n = B
     *    p  c   n       第二轮 的时候 [p 是空的 && c 有值,这个时候删除 c.next], 完的时候 p c 都有值
     *       p   c   n   第三轮 开始, p c 都有值, 把 p 的值 赋值给 c.next, 因为数据反转的时候 c 是p的父级, 
     * 然后后面 继续 c.next 里面是 p, c 重新赋值给p, c 再拿到最新的值,p 再次赋值给 c.next
     */

    preNode = currNode;
    currNode = nextNode;
    nextNode = currNode?.next;
  }
  currNode.next = preNode
  return currNode;
}

 

标签:nextNode,currNode,value,next,反向,链路,let,js,preNode
From: https://www.cnblogs.com/bruce-gou/p/17519000.html

相关文章

  • js基础速成
    js记录js中对象类型object创建对象vartest=newobject();直接添加属性test.name='熊大'没有属性,系统不会报错,会返回undefined删除属性deletetest.name创建对象varobj={}或者newobjectjs中函数也是一个对象varfun=newfunction()常规写法functionfun(......
  • [转]前台传递给后台的JSON字符串中的引号 “” 在JAVA后台被转义为 &quot
    1、问题:前台数据,JSON字符串带有引号“”,数据被传递到后台,引号被转义为&quot,后台无法解析。前台数据如下:正常后台数据如下:大部分正常,只有JSON字符串中的“”被转义为&quot2、解决:方法一:使用apache的lang包里的方法StringappJson=StringEscapeUtils.un......
  • JSR107
    JSR107JSR是JavaSpecificationRequests的缩写,Java规范请求,故名思议提交Java规范,JSR-107呢,就是关于如何使用缓存的规范,是java提供的一个接口规范,类似于JDBC规范,没有具体的实现,具体的实现就是ehcache等这些缓存解决方案。  JSR107核心接口JavaCaching(JSR-1......
  • 原生JS滚动条触底
    /console.log("UL的高度",main.clientHeight);//console.log("所有的LI的高度",main.scrollHeight);//console.log("可以滚动的距离",main.scrollHeight-main.clientHeight);//console.log("main.scrollTop",main.scrollTop);if(main.scr......
  • 基于PhantomJS的网站截图服务API设计与开发
    为公司某业务实现“服务端对网站截图”功能,搜罗了很多技术最终采用了PhantomJS无头浏览器技术。什么是PhantomJS?PhantomJS是一个基于webkit的javaScriptAPI。它使用QtWebKit作为它核心浏览器的功能,使用webkit来编译解释执行javaScript代码。任何你可以基于在webkit浏览器做的事情,......
  • vane 一个适用于前端打工人的全栈框架,nodejs+vue3+typescript
    vane写这个的初衷是因为每次用node写接口的时候总是需要一些写大一堆的东西,也有些人把很多接口都放在一个js文件内,看起来很是杂乱,后来用到nuxt写的时候,感觉用文件名来命名接口路径很是方便,无论是query参数还是params参数,都可以通过文件名来命名,也可以通过文件夹层级......
  • JS逆向实战19——通杀webpack逆向
    声明本文章中所有内容仅供学习交流,抓包内容、敏感网址、数据接口均已做脱敏处理,严禁用于商业用途和非法用途,否则由此产生的一切后果均与作者无关,若有侵权,请联系我立即删除!网站aHR0cHM6Ly9mb2dhbmctbS5pdG91Y2h0di5jbi9tZWRpYURldGFpbC8zODc1Nw==aHR0cHM6Ly93d3cuZ205OS5jb20......
  • 【前端教程02】js拖拽布局demo
    <!DOCTYPEhtml><htmllang="en"><head><metacharset="UTF-8"><metaname="viewport"content="width=device-width,initial-scale=1.0"><metahttp-equiv="X-UA-Compat......
  • node使用jsonwebtoken生成token与验证是否过期
    场景我们可以使用cookie,session,token来做鉴权。下面我们来看一下,如何使用token来做鉴权jwt.sign的简单介绍npminstalljsonwebtoken下载使用jsonwebtoken生成token的基本语法。jwt.sign(payload,secretOrPrivateKey,[options,callback])第1个参数payload:可以......
  • 2023-06-30 reportJSException >>>> exception function:createInstanceContext, exce
    uniapp之运行到android端报错:reportJSException>>>>exceptionfunction:createInstanceContext,exception:whitescreencausecreateinstanceContextfailed,checkjsstack->UncaughtSyntaxError:Invalidorunexpectedtoken,即:reportJSException>>异......