js数据结构——链表(一)
2017-01-22 00:00
183 查看
摘要: js数据结构——链表(一)
1.创建链表
2.向链表尾部追加元素
(1)先将传入的参数变为节点类型的实例,使其具有next属性。
(2)然后定义一个游标current,游标的作用即使保证原链表不变,而游标通过移动,获取要操作的位置,并可以获取链表中的一段。方便链表的拼接操作。
(3)如果链表为空,直接head = node。
(4)如果不为空,通过游标current找到最后一项,然后current.next = node;
3.在任意位置插入一个元素
(1)两个参数,position和element
(2)posiiton在0~length-1之间才能执行
(3)如果position是0,node.next = current;然后把head节点赋值为node即可
(4)否则,通过current找到要插入的位置,该位置的前一位是previous,然后node.next = current;previous.next = node;即可
4.从链表中移除元素
(1)参数:position
(2)如果要移除的是第一项,直接head = current.next;
(3)否则循环找到要移除的位置,而要移除的前一位是previous,然后将previous.next = current.next;即可,就移除了current。
4.indexOf()方法
(1)参数:element
(2)循环条件:当前current存在
(3)如果element等于当前current值,返回index
(4)如果不等,current = current.next;索引值index++;
(5)如果前面都没返回值,那最后的return语句得到执行,返回-1,表示未找到
5.toString()方法
(1)循环条件:current存在
(2)拼接字符串
(3)current=current.next
2.current和previous都是游标类型的节点,在不影响原链表的情况下,用于找到要操作的位置,并可以获取链表中的一段。一般给current赋初值位head。
3.在插入,移除的时候,要判断位置是否为0;在追加的时候,要判断链表是否位空。
1.创建链表
//定义链表对象 function LinkedList(){ //定义节点类 var Node = function(element){ this.element = element; //元素值 this.next = null; //next元素,指向下一个节点 } var length = 0; var head = null; }
2.向链表尾部追加元素
LinkedList.prototype.append = function(element){ //新建一个几点对象,然后创建一个游标 var node = new Node(element), current; if(head == null){ //列表中第一个节点 head = node; }else{ current = head; //循环列表直到找到最后一项 while(current.next){ current = current.next; } //找到最后一项并将其next赋为node,建立连接 current.next = node; } length++; //更新链表的长度 };
(1)先将传入的参数变为节点类型的实例,使其具有next属性。
(2)然后定义一个游标current,游标的作用即使保证原链表不变,而游标通过移动,获取要操作的位置,并可以获取链表中的一段。方便链表的拼接操作。
(3)如果链表为空,直接head = node。
(4)如果不为空,通过游标current找到最后一项,然后current.next = node;
3.在任意位置插入一个元素
LinkedList.prototype.insert = function(position,element){ //检查边界值,在链表长度范围内才能执行 if(position >= 0 && position <= length){ var node = new Node(element), current = head, previous, index = 0; if(position === 0){ //如果添加的位置是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; } };
(1)两个参数,position和element
(2)posiiton在0~length-1之间才能执行
(3)如果position是0,node.next = current;然后把head节点赋值为node即可
(4)否则,通过current找到要插入的位置,该位置的前一位是previous,然后node.next = current;previous.next = node;即可
4.从链表中移除元素
LinkedList.prototype.removeAt = function(position){ //检查是否越界 if(position >= 0 && position < length){ var current = head, previous, index = 0; //移除第一项 if(position === 0){ head = current.next; }else{ while(index++ < position){ previous = current; current = current.next; } //将previous与current的下一项链接起来,跳过current,从而移除他 previous.next = current.next; } length--; return current.element; }else{ return null; } };
(1)参数:position
(2)如果要移除的是第一项,直接head = current.next;
(3)否则循环找到要移除的位置,而要移除的前一位是previous,然后将previous.next = current.next;即可,就移除了current。
4.indexOf()方法
//获取元素索引值 LinkedList.prototype.indexOf = function(element){ var current = head, index = 0; while(current){ if(element === current.element){ return index; } index++; current = current.next; } return -1; };
(1)参数:element
(2)循环条件:当前current存在
(3)如果element等于当前current值,返回index
(4)如果不等,current = current.next;索引值index++;
(5)如果前面都没返回值,那最后的return语句得到执行,返回-1,表示未找到
5.toString()方法
LinkedList.prototype.toString = function(){ var current = head, string = ''; while(current){ string += current.element+" "; current = current.next; } return string; }; //判空 LinkedList.prototype.isEmpty = function(){ return length === 0; };
(1)循环条件:current存在
(2)拼接字符串
(3)current=current.next
总结
1.head节点十分重要,任何操作的发起都是从head开始,有时候我们看似已经完成了插入或删除操作,但忘记重新赋head节点的值,会导致下一次操作无法正常进行2.current和previous都是游标类型的节点,在不影响原链表的情况下,用于找到要操作的位置,并可以获取链表中的一段。一般给current赋初值位head。
3.在插入,移除的时候,要判断位置是否为0;在追加的时候,要判断链表是否位空。
相关文章推荐
- js数据结构——链表(二)
- 数据结构(一)顺序表、链表以及队列
- 【2120】数据结构实验之链表五:单链表的拆分 sdutOJ
- redis源码分析之数据结构(一)链表adlist.c
- 数据结构第四周项目2--建设“单链表”算法库
- 数据结构实验之链表五:单链表的拆分
- 数据结构:实验六(单循环链表实现链式队列)
- SDUT OJ 数据结构实验之链表九:双向链表
- 数据结构之线性链表
- 数据结构之链表
- 数据结构之链表与数组(二) -单向链表上的简单操作问题
- Java单链表顺序和链式实现(数据结构五)
- js:数据结构笔记7--哈希表
- 第十八节 数据结构之单向链表
- sdutacm-数据结构实验之链表二:逆序建立链表
- 数据结构——带头结点链表和不带头结点链表操作比较
- 数据结构与算法 -- 链表
- 数据结构之链表
- 数据结构实验之链表一:顺序建立链表(STL库list)
- 数据结构实验之链表七:单链表中重复元素的删除