leetCode中Merge Two Sorted Lists,由此引发温习链表结构在JavaScript中的存储表示
链表
物理上非连续,非顺序的存储结构,数据元素以结点的指针链接次序实现的。生活中例子:自行车的链条
结点: data:存储数据元素的数据域,next是存储下一个结点地址的指针域
┌───┬───┐
│data │next │
└───┴───┘
优点:
- 克服数组链表需要预先知道数据大小的缺点
缺点:
- 无法随机读取
- 增加空间开销,增加了指针开销
单链表
以“结点的序列”表示线性表称作线性链表

尾节点指针为null
|
|
双链表
针对单链表的优化,增加一个前地址,提高查找效率。这样的设计会比单链表更加复杂,用空间换时间

|
|
循环链表
循环链表:由于单链表的只会往后方传递,所以到达尾部的时候,要回溯到首部会非常麻烦,所以把尾部节的链与头连接起来形成循环
尾节点地点指针指向头部地址
循环双链表
和双链表的区别:
尾节点地点next指针指向头部地址
头结点的prev指向尾结点
ES6实现单链表
方法:
● append(data):向链表尾部添加一个新的元素;
● insert(position,data):向链表特定位置插入元素;
● remove(node):从链表移除一项;
● indexOf(node):返回链表中某元素的索引,如果没有返回-1;
● removeAt(position):从特定位置移除一项;
● isEmpty():判断链表是否为空,如果为空返回true,否则返回false;
● size():返回链表包含的元素个数;
|
|
使用场景
暂时没有遇到需要使用该结构的场景。如遇到再补充