JavaScript完成链表

什么是链表

链表是一个鸠合,是C或C++中的观点。和数组有什么区别呢?
链表每一个元素有两部份构成,第一部份是存储的值,第二部份是纪录了下一个元素的位置信息。在C中纵然下一个元素的指针,实在就经由过程第二个属机能直接拿到下一个元素的值。

{
value:"",
next:1
}

一个元素经由过程他的next就晓得下一个值是什么。就像一个链子,上一个元素连着下一个元素。
向链表中插进去一个值,不须要把背面的每一个元素今后挪动位置。
1.只须要把修正插进去位置前一个元素的next属性只想插进去的值;
2.插进去的值的next只插进去以后的谁人元素即可。
由于在JavaScript中不能像C一样那样直接操纵指针,所以现在用数组模仿一个链表。

javascript版本的链表

//比方有一个鸠合
let left = [2, 3, 4, 5, 8, 9];
//用另一个鸠合对应位置的值来纪录下一个元素的索引。每一个值存储的是须要获取值的索引,假如没有对应的则存-1;
//这个鸠合的玄妙在于,它的**索引**和**值**是能串连起来的“一条绳”,索引和值前后连接。
// [1, 2, 3, 4, 5, -1]
//  0  1  2  3  4   5
let right = [1, 2, 3, 4, 5, -1];
//一个要插进去的值
let middle = 6;
let len = left.length;
left.push(middle);
let t = 0;
while (t != -1) {
  if (left[right[t]] > middle) {
    right[len] = right[t];
    right[t] = len;
    break;
  }
  t = right[t];
}

console.log("输出结果:");
console.log(left);
console.log(right);
t = 0;
while (t != -1) {
  console.log(left[t]);
  //这就表现出了索引和值前后连接的关系了。注重right的索援用的也是t
  t = right[t];
}

结果

2 3 4 5 6 8 9

剖析

原始:

[2, 3, 4, 5, 8, 9];
[1, 2, 3, 4, 5, -1]

插进去后:
所谓的插进去是保证输出的递次像插进去的结果。

[2, 3, 4, 5, 8, 9, 6];
[1, 2, 3, 6, 5, -1, 4]
    原文作者:code_sir
    原文地址: https://segmentfault.com/a/1190000018403313
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞