由於自身資料結構的基礎薄弱,買了一本JavaScript資料結構與演算法實作的書來看,重新把LinkedList鏈結串列學習了一遍,並用JS實作出來。

LinkedList鏈結串列

要存放多個元素,最常用的資料結構可能是陣列,但是在大多數語言中,陣列的大小是固定的,要從陣列中插入項目或移除項目的成本很高,因為必須移動其他元素。
LinkedList 就解決了這個情況,它存放有順序的元素集合,但不同於陣列,鏈結串列的元素在記憶體中並不是連續放置,每個元素由一個存放元素本身的節點和一個指向下一個元素的指位器組成。

實作

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
function (){

  var Node = function(element){
this.element = element;
this.next = null;
}
var length = 0;
var head = null;
//尾部追加元素
this.append = function(element){
var node = new Node(element),
current;
if(head === null){
head = node;
}else{
current = head;
while(current.next){
current = current.next;
}
current.next = node;
}
length++;
}
//移除特定位置元素
this.removeAt = function(position){大专栏  [JS]實作LinkedList鏈結串列n>
//檢查有無越界
if(position > -1 && position < length){
var current = head,
previous,
index = 0;
//移除第一項
if(position === 0){
head = current.next;
}else{
while(index++ < position ){
previous = current;
current = current.next;
}
}
length--;
return current.element;
}else{
return null;
}
}
//插入特定位置元素
this.insert = function(position, element){
if(position >=0 && position <= length){
var node = new Node(element),
current = head,
previous,
index = 0;
//在第一個位置添加
if(position === 0){
node.next = current;
head = node;
}else{
while(index++ < position){
previous = current;
current = current.next;
}
node.next = current;
previous.next = node;
}
length++;
return true;
}else{
return false;
}
}
//將list輸出成String
this.toString = function(){
var current = head,
string = '';
while(current){
string += current.element + (current.next ? ', ' : '');
current = current.next;
}
return string;
}
//查詢元素在第幾項
this.indexOf = function(element){
var current = head,
index = 0;
while(current){
if(element === current.element){
return index;
}
index++;
current = current.next;
}
return -1;
}
//移除指定元素
this.remove = function(element){
var index = this.indexOf(element);
return this.removeAt(index);
}
this.isEmpty = function(){
return length === 0;
}
this.size = function(){
return length;
}
this.getHead = function(){
return head;
}
}

最新文章

  1. 从零开始,DIY一个jQuery(3)
  2. iOS 导出 ipa 包时 四个选项的意义
  3. Oracle to_char 转换数值
  4. CommittableTransaction和TransactionScope
  5. js复选框操作
  6. C#中返回值封装
  7. 如何实现LBS轨迹回放功能?含多平台实现代码
  8. web开发中目录路径问题的解决
  9. preg_match_all
  10. Embedded binary is not signed with the same certificate as the parent app
  11. 【转】Java中Vector和ArrayList的区别
  12. 使用GitHub管理源代码
  13. linux下so动态库一些不为人知的秘密(转)
  14. windows下强大的wmic命令行工具
  15. window、linux系统与linux服务器之间使用svn同步及自动部署代码的方法
  16. 欢迎大家关注我的微信公众号(nangongkuo)
  17. 【JAVA】高并发优化细节点
  18. windows下安装Scrapy框架
  19. excel导出的时候从程序后台写到excel里的是文本,所以无法在excel中计算怎么办?
  20. [LeetCode] 422. Valid Word Square_Easy

热门文章

  1. nested exception is java.lang.IllegalArgumentException: warning no match for this type name: res [Xlint:invalidAbsoluteTypeName]
  2. 使用NtQueryInformationFile函数获得不到完整路径
  3. 在设备上启用 adb 调试,有一个小秘密
  4. JZOJPJ-C 8/21题解
  5. 吴裕雄--天生自然MySQL学习笔记:MySQL 处理重复数据
  6. 正文内容 python3编码问题
  7. h5与安卓、ios交互
  8. NOIp2018解题报告
  9. 微信oauth2授权获得用户信息
  10. 【@ConfigurationProperties注解】Not Found The requested URL /spring-boot/docs/2.2.2.RELEASE/reference/html/configuration-metadata.html was not found on this server.