//返回特定位置的元素 getElementAt(index) { if (index >= 0 && index <= this.count) { let node = this.head; for (let i = 0; i < index && node != null; i++) { node = node.next; //通过循环,使得node指向index元素 } return node; } thrownewError("out range"); }
//返回元素在链表中的索引。如果链表中没有该元素则返回-1 indexOf(element) { let current = this.head; for (let i = 0; i < this.size() && current != null; i++) { if (current.element === element) { return i; } current = current.next; } return -1; }
//向尾部添加一个新元素 push(element) { let node = new Node(element); if (this.head == null) { //如果是空链表,直接加到头部 this.head = node; } else { let current = this.head; while (current.next != null) { //获得最后一项 current = current.next; } //当current.next == undefined||null时,即到达链表尾部 //**链表最后一个节点的下一个元素始终是undefined或null** current.next = node; //将其next赋为新元素,建立链接 } this.count++; } //也可以使用这个方法 // …… // else { // **let current = this.getElementAt(this.count - 1);** //找到node // **current.next = node;** // } // ……
//向特定位置插入一个新元素 insert(element, index) { if (index >= 0 && index <= this.count) { //在范围内 let node = new Node(element); if (index === 0) { //在头部直接加 const current = this.head; node.next = current; this.head = node; } else { const pre = this.getElementAt(index - 1); //获得前一个节点的位置 node.next = pre.next; //新创建的节点赋值为pre.next pre.next = node; //将pre.next指向新创建的节点 } this.count++; //长度+1 returntrue; } thrownewError("out range"); }
//从特定位置移除一个元素 removeAt(index) { if (index >= 0 && index < this.count) { let current = this.head; if (index === 0) { //移除第一项 this.head = current.next; //也可以使用head=head.next } else { for (let i = 0; i < index; i++) { //从移除的位置开始,其后元素往前移一位 let pre = current; current = current.next; } //pre为要移除元素的前一位,next指针指向移除元素的下一位,即实现了移除元素 pre.next = current.next; } this.count--; return current.element; } returnundefined; //如果index不在范围内,返回undefined }
//移除一个元素 remove(element) { const index = this.indexOf(element); returnthis.removeAt(index); }
//把LinkedList对象转换成一个字符串 toString() { if (this.head == null) { return''; } let objString = `${this.head.element}`; let current = this.head.next; for (let i = 1; i < this.size() && current != null; i++) { objString = `${objString},${current.element}`; current = current.next; } return objString; }