function LinkedList(){ var Node = function (element){ this .element = element this .next = null } var length = 0 var head = null this .append = function (element){ var node = new Node(element) var current if (head == null ){ //鏈表爲空 head = node } else { //鏈表不爲空 current = head //循環鏈表,直到最後一項 while (current.next){ current = current.next } current.next = node } length ++ //更新鏈表長度 } this .insert = function (position,element){ var node = new Node(element) var current = head var previous var index = 0 if (position>=1 && position<=length){ //判斷是否越界 if (position === 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 } } this .indexOf = function (element){ var current = head var index = -1 while (current){ if (element === current.element) { return index } index++ current = current.next } return -1 } this .removeAt = function (position){ if (position>-1 && position<length){ //判斷是否越界 var current = head var previous var index = 0 if (position === 0){ //移除第一個元素 head = current.next } else { while (index++ < position){ previous = current current = current.next } previous.next = current.next //移除元素 } length -- //更新長度 return current.element } else { return null } } this .remove = function (element){ var index = this .indexOf(element) return this .removeAt(index) } this .isEmpty = function (){ return length == 0 } this .size = function (){ return length } this .toString = function (){ var current = head var string = "" while (current){ string = "," + current.element current = current.next } return string.slice(1) } this .getHead = function (){ return head } } |