LinkedList
鏈結串列
by Chris_Walter
JavaScript
class Node{
constructor(element){
this.element = element;
this.next = null;
}
}
class LinkedList{
constructor(){
this.length = 0;
this.head = null;
}
size(){
return this.length;
}
append(element){
let node = new Node(element);
let result = 'head >';
//如果head為null,要讓他指向到第一個node
if(this.head === null){
this.head = node;
} else {
let current = this.head;
//使用迴圈直到找到最後一個
while(current.next){
current = current.next;
}
current.next = node;
}
this.length++;
}
removeAt(position){
if(position > -1 && position < this.size()){
let current = this.head;
//移除首項
if(position === 0){
this.head = current.next;
} else{
let index = 0;
let previous;
//移除中間項或是最後一項要使用迴圈迭代串列
while(position !== index){
index++;
previous = current;
current = current.next;
}
//跳過current
previous.next = current.next;
}
this.length--;
return current.element;
} else{
return false;
}
}
insert(position, element){
if(position > -1 && position <= this.size()){
let node = new Node(element);
let current = this.head;
if(position === 0){
this.head = node;
node.next = current;
} else {
let index = 0;
let previous;
while(position !== index){
index++
previous = current;
current = current.next;
}
previous.next = node;
node.next = current;
}
this.length ++;
return true;
} else {
return false;
}
}
indexOf(element){
let index = 0;
let current = this.head;
while(current !== null){
if(element === current.element){
return index;
}
index++;
current = current.next;
}
return -1;
}
remove(element){
let index = this.indexOf(element);
return this.removeAt(index);
}
toString(){
let current = this.head;
let str = 'head-';
while(current !== null){
str += `${current.element}-`;
current = current.next;
}
return...