链表
- append(element): 向列表尾部添加一个新的项
- insert(position,element):向列表的特定位置插入一个新的项
- remove(element): 从列表中移除一项
- indexOf(element): 返回元素在列表中的索引.如果列表中没有该元素则返回-1.
- removeAt(position):从列表的特定位置移除一项
- isEmpty(): 如果链表中不包含任何元素,返回true,如果链表长度大于0则返回false
- size(): 返回链表包含的元素个数。与数组的length属性类似
- toString(): 由于列表项使用了Node类,就需要重写继承自JavaScript对象默认的toString()方法,让其只输出元素的值
链表实现append,getHead
likedList.js
var LikedList = function() {
//链表头
var head = null;
// 链表长度
var length = 0;
// 节点
var Node = function(el) {
this.el = el;
this.next = null;
}
//链表尾添加元素
this.append = function(el) {
var node = new Node(el) // 1 2
if (head == null) {
head = node; //head =1
} else {
var current = head; //current=1
while (current.next) { //null
current = current.next;
}
//while循环执行完之后,current已经是链表的最后一项了
current.next = node //current.next = node = 2
}
length++
}
this.getHead = function() {
return head;
}
}
复制代码
实例化
链表插入 insert
likedList.js
var LikedList = function() {
//链表头
var head = null;
// 链表长度
var length = 0;
// 节点
var Node = function(el) {
this.el = el;
this.next = null;
}
//链表尾添加元素
this.append = function(el) {
var node = new Node(el) // 1 2
if (head == null) {
head = node; //head =1
} else {
var current = head; //current=1
while (current.next) { //null
current = current.next;
}
//while循环执行完之后,current已经是链表的最后一项了
current.next = node //current.next = node = 2
}
length++
}
//链表某一个位置添加元素
this.insert = function(position, el) {
//越界
if (position > -1 && position < length) {
var node = new Node(el);
if (position == 0) {
var current = head;
head = node;
head.next = current;
} else {
var index = 0;
var current = head;
var previous = null;
while (index < position) {
previous = current;
current = current.next;
index++
}
previous.next = node;
node.next = current;
}
length++
}
}
this.getHead = function() {
return head;
}
}
复制代码
实例化
remove removeAt
likedList.js
var LikedList = function() {
//链表头
var head = null;
// 链表长度
var length = 0;
// 节点
var Node = function(el) {
this.el = el;
this.next = null;
}
this.removeAt = function(position) {
if (position > -1 && position < length) {
if (position == 0) {
var current = head;
head = current.next;
} else {
var current = head;
var previous = null;
var index = 0;
while (index < position) {
previous = current
current = current.next;
index++
}
previous.next = current.next;
}
length--
return current
}
return null
}
this.indexOf = function(el) {
var current = head;
var index = 0;
while (current) {
if (current.el == el) {
return index
}
current = current.next
index++
}
return -1
}
this.remove = function(el) {
return this.removeAt(this.indexOf(el))
}
}
复制代码
实例化
链表所有功能
likedList.js
var LikedList = function() {
//链表头
var head = null;
// 链表长度
var length = 0;
// 节点
var Node = function(el) {
this.el = el;
this.next = null;
}
//链表尾添加元素
this.append = function(el) {
var node = new Node(el) // 1 2
if (head == null) {
head = node; //head =1
} else {
var current = head; //current=1
while (current.next) { //null
current = current.next;
}
//while循环执行完之后,current已经是链表的最后一项了
current.next = node //current.next = node = 2
}
length++
}
//链表某一个位置添加元素
this.insert = function(position, el) {
//越界
if (position > -1 && position < length) {
var node = new Node(el);
if (position == 0) {
var current = head;
head = node;
head.next = current;
} else {
var index = 0;
var current = head;
var previous = null;
while (index < position) {
previous = current;
current = current.next;
index++
}
previous.next = node;
node.next = current;
}
length++
}
}
//删除指定位置的元素
this.removeAt = function(position) {
if (position > -1 && position < length) {
if (position == 0) {
var current = head;
head = current.next;
} else {
var current = head;
var previous = null;
var index = 0;
while (index < position) {
previous = current
current = current.next;
index++
}
previous.next = current.next;
}
length--
return current
}
return null
}
//查找链表元素下标
this.indexOf = function(el) {
var current = head;
var index = 0;
while (current) {
if (current.el == el) {
return index
}
current = current.next
index++
}
return -1
}
//删除指定元素
this.remove = function(el) {
return this.removeAt(this.indexOf(el))
}
// 是否为空
this.isEmpty = function() {
return length == 0;
}
//链表长度
this.size = function() {
return length
}
//链表头
this.getHead = function() {
return head;
}
}
复制代码