单向链表(单链表)是链表的一种,其特点是链表的链接方向是单向的,对链表的访问要通过顺序读取从头部开始;链表是使用指针进行构造的列表--百度
append(element)
:向列表尾部添加一个新的项
insert(position, element)
:向列表的特定位置插入一个新的项。
remove(element)
:从列表中移除一项。
indexOf(element)
:返回元素在列表中的索引。如果列表中没有该元素则返回-1
。
removeAt(position)
:从列表的特定位置移除一项。
isEmpty()
:如果链表中不包含任何元素,返回true
,如果链表长度大于0则返回false
。
size()
:返回链表包含的元素个数。与数组的length
属性类似。
toString()
:由于列表项使用了Node
类,就需要重写继承自JavaScript对象默认的toString
方法,让其只输出元素的值。
// 节点的结构 class Lnode { constructor(data) { this.data = data; this.next = null; } } // 链表的结构 class LinkList { constructor() { this.head = null; this.length = 0; } append(ele) { // 创建新节点 let newnode = new Lnode(ele); console.log(newnode); if (this.head == null) { this.head = newnode; } else { let current = this.head; while (current.next != null) { // 继续找 current = current.next }; current.next = newnode; } this.length++ } } let list = new LinkList(); for (let i = 0; i < 5; i++) { list.append(i) } console.log(list);
打印:结果
insert(position, el) { // 位置是否合法 if (position < 0 || position > this.length || Number.isInteger(position)) { return false } let newnode = new Lnode(ele) // 1、在头部插入 if (position == 0) { if (this.head == null) { this.head = newnode; } else { newnode.next = this.head; this.head = newnode } this.length++; } else if (position == this.length) { //尾部 this.append(ele) } else { let current = this.head let index = 0 while (index < position - 1) { current = current.next; index++ } newnode.next = current.next current.next = newnode; this.length++ } }
removeAt(position) { if (position < 0 || position > this.length - 1 || !Number.isInteger(position)) { return false } if (this.head == null) { return }else{ if(position ==0 ){ this.head = this.head.next }else{ let current = this.head, index = 0; index = 0; while (index< position -1){ current = current.next; index++; } current.next = current.next.next; } this.length--; } }
indexOf(ele){ let current = this.head, index =0; while(index<this.length){ if(current.data ==ele){ return index }else{ current = current.next index++; } } return -1; }
remove(ele){ let index = this.indexOf(ele); this.removeAt(index) }
toString(){ let current = this.head,index = 0,res = ""; while(index <this.length){ res += "-"+current.next; current = current.next; index++; } return res.slice(1) }