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...