<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8" /> <meta http-equiv="X-UA-Compatible" content="IE=edge" /> <meta name="viewport" content="width=device-width, initial-scale=1.0" /> <title>双向链表</title> </head> <body> <script> function DoubleList() { this.head = null; this.tail = null; this.length = 0; function Node(data) { this.data = data; this.prev = null; this.next = null; } DoubleList.prototype.append = function (data) { var newNode = new Node(data); if (this.length == 0) { this.head = newNode; } else { var current = this.head; while (current.next) { current = current.next; } current.next = newNode; } this.length += 1; }; DoubleList.prototype.backwardString = function (data) { //定义变量 var current = this.head; var resultString = ""; while (current) { resultString += current.data + " "; current = current.next; } return resultString; }; DoubleList.prototype.forwardString = function (data) { //定义变量 var current = this.tail; var resultString = ""; while (current) { resultString += current.data + " "; current = current.prev; } return resultString; }; DoubleList.prototype.toString = function (data) { //定义变量 return this.backwardString(); }; DoubleList.prototype.insert = function (position, data) { if (position < 0 || position > this.length) return false; var newNode = new Node(data); if (this.length == 0) { this.head = newNode; this.tail = newNode; } else { if (position == 0) { this.head.prev = newNode; newNode.next = this.head; this.head = newNode; } else if (position == this.length) { newNode.prev = this.tail; this.tail.next = newNode; this.tail = newNode; } else { var current = this.head; var index = 0; while (index++ < position) { current = current.next; } newNode.next = current; newNode.prev = current.prev; current.prev.next = newNode; current.prev = newNode; } } this.length += 1; return true; }; DoubleList.prototype.get = function (position, data) { if (position < 0 || position > this.length) return null; //获取元素 var current = this.head; var index = 0; while (index++ < position) { current = current.next; } return current.data; }; DoubleList.prototype.indexOf = function (data) { var current = this.head; var index = 0; //开始查找 while (current) { if (current.data == data) { return index; } current = current.next; index += 1; } return -1; }; DoubleList.prototype.indexOf = function (position, newData) { if (position < 0 || position > this.length) return false; var current = this.head; var index = 0; while (index++ < position) { current = current.next; } current.data = newData; return true; }; DoubleList.prototype.removeAt = function (position) { if (position < 0 || position >= this.length) return null; var current=this.head if(this.length==1){ this.head=null this.tail=null }else{ if(position==0){ this.head.next.prev=null this.head=this.head.next }else if(position=this.length){ current=this.tail this.tail.next.prev=null this.tail=this.tail.prev }else{ var index=0 while(index++<position){ current=current.next } current.prev.next=current.next current.next.prev=current.prev } } this.length-=1 return current.data } DoubleList.prototype.remove = function (position) { var index=this.indexOf(data) return removeAt(index) } DoubleList.prototype.isEmpty = function (position) { return this.length==0 } DoubleList.prototype.size = function (position) { return this.length } DoubleList.prototype.getFirst = function (position) { return this.head.data } DoubleList.prototype.getEnd = function (position) { return this.tail.data } } </script> </body> </html>