链表
2019-01-21 02:38:27来源:博客园 阅读 ()
链表
概念: 链表存储有序的元素集合,但不同于数组,链表中的元素在内存中并不是连续放置的。每个元素由一个存储元素本身的节点和一个指向下一个元素的引用(也称指针或链接)组成。下图展
示了一个链表的结构:
创建链表
function LinkedList() { let Node = function(element){ // {1}需要一个Node辅助类 this.element = element; this.next = null; }; let length = 0; // {2}存储列表项的数量的length属性 let head = null; // {3}存储第一个节点的引用 // 向链表尾部追加元素 this.append = function(element) { let node = new Node(element), //{1}把element作为值传入,创建Node项 current; //{2} if (head === null){ //列表中第一个节点 //{3} head = node; } else { current = head; //{4} //循环列表,直到找到最后一项 while(current.next){ current = current.next; } //找到最后一项,将其next赋为node,建立链接 current.next = node; //{5} } length++; //更新列表的长度 //{6} }; // 在任意位置插入元素 this.insert = function(position, element){ //检查越界值 if (position >= 0 && position <= length){ //{1} let node = new Node(element), current = head, previous, index = 0; if (position === 0){ //在第一个位置添加 node.next = current; //{2}是把node.next的值设为current head = node;//把head的引用改为node } else { while (index++ < position){ //{3}需要循环访问列表,找到目标位置 previous = current; current = current.next; } node.next = current; //{4}把新项(node)和当前项链接起来 previous.next = node; //{5}让previous.next指向node } length++; //更新列表的长度 return true; } else { return false; //{6}没有添加项到列表中 } }; // 从链表中移除元素 this.removeAt = function(position) { //检查越界值 if (position > -1 && position < length) { // {1}验证这个位置是否有效 let current = head, // {2}创建一个对列表中第一个元素的引用 previous, // {3}一个对当前元素的前一个元素的引用 index = 0; // {4} //移除第一项 if (position === 0){ // {5}如果想移除第一个元素,要做的就是让head指向列表的第二个元素 head = current.next; } else { while (index++ < position){ // {6} previous = current; // {7} current = current.next; // {8}变量总是为对所循环列表的当前元素的引用 } //将previous与current的下一项链接起来:跳过current,从而移除它 previous.next = current.next; // {9}要从列表中移除当前元素,要做的就是将previous.next和current.next链接起来 } length--; // {10} return current.element; } else { return null; // {11} } };
this.indexOf = function(element){ let current = head, //{1} index = -1; while (current) { //{2} if (element === current.element) { return index; //{3}检查当前元素是否是我们要找的。如果是,就返回它的位置 } index++; //{4}如果不是,就继续计数 current = current.next; //{5}检查列表中下一个节点 } return -1; }; this.isEmpty = function() { return length === 0; };
this.size = function() { return length; };
this.getHead = function(){ return head; };
this.toString = function(){ let current = head, //{1} string = ''; //{2} while (current) { //{3}循环访问列表中的每个元素 string +=current.element +(current.next ? 'n' : '');//{4}然后我们就得到了元素的内容,将其拼接到字符串中 current = current.next; //{5}最后,继续迭代下一个元素 } return string; //{6} }; }
1. 向链表尾部追加元素
1.1 向为空的列表添加一个元素
1.2 向列表的尾部添加一个元素
2.从链表中移除元素
2.1 移除第一个元素
2.2 移除第一个以外的任一元素
3.在任意位置插入元素
3.1 需要在列表的起点添加一个元素
3.2 在列表中间或尾部添加一个元素
尾部:
中间:
原文链接:https://www.cnblogs.com/ppxyq/p/10277134.html
如有疑问请与原作者联系
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
- JavaScript之基本概念(二) 2019-08-14
- 回流和重绘 2019-08-14
- JavaScript之基本概念(一) 2019-08-14
- JavaScript数据结构——链表的实现与应用 2019-08-14
- 链表!比数组更适合做增删操作的数据结构 2019-08-14
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash