js 实现链表
function LinkedList ( ) {
this . Node = function ( item ) {
this . item = item;
this . next = null ;
}
let length = 0 ;
let head = null ;
this . append = function ( item ) {
var node = new this. Node ( item) ,
current;
if ( head == null ) {
head = node;
} else {
current = head;
while ( current. next) {
current = current. next;
}
current. next = node;
}
length ++ ;
return node;
}
this . insert = function ( position, item ) {
if ( position >= 0 && position <= length) {
var node = new this. Node ( item) ,
current = head,
previous,
index = 0 ;
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 . removeAt = function ( position ) {
if ( position >= 0 && position <= length) {
let current = head,
previous,
index = 0 ;
if ( position == 0 ) {
head = current. next;
} else {
while ( index++ < position) {
previous = current;
current = current. next;
}
previous. next = current. next;
}
length-- ;
return current. item;
} else {
return null ;
}
}
this . remove = function ( item ) {
let index = this . indexOf ( item) ;
return this . removeAt ( index) ;
}
this . indexOf = function ( item ) {
let current = head,
index = 0 ;
while ( current) {
if ( current. item === item) {
return index;
}
index++ ;
current = current. next;
}
return - 1 ;
}
this . isEmpty = function ( ) {
return length === 0 ;
}
this . size = function ( ) {
return length;
}
this . toString = function ( ) {
let current = head,
string = '' ;
while ( current) {
string += current. item;
current = current. next;
}
return string;
}
this . getHead = function ( ) {
return head;
}
this . print = function ( ) {
let current = head;
while ( current. next) {
console. log ( current) ;
current = current. next;
}
}
}
let list = new LinkedList ( ) ;