/*
单链表是一种链式存取的数据结构,用一组地址任意的存储单元存放线性表中的数据元素
*/
var LinkedList = function () {
var length = 0;
var head = null;
/*
获取单链表的长度
*/
this.size = function () {
return length;
}
/*
获取头节点
*/
this.head = function () {
return head;
}
/*
插入一个节点
*/
this.add = function (element) {
//新建一个节点
var node = new Node(element);
//如果没有头节点,把当前的节点指向头节点
if(head == null){
head = node;
}else{
var currentNode = head;
//查找尾节点是空的节点,找到并把当前的节点指向它
while(currentNode.next){
currentNode = currentNode.next;
}
currentNode.next = node;
}
length++;
}
/*
移除一个元素
*/
this.remove = function (element) {
//删除一个节点
//循环遍历找到这个节点
if(this.size() > 0){
var currentNode = head;
var preNode;
if(currentNode.element == element){
head = currentNode.next;
}else{
while (currentNode.element != element){
preNode = currentNode;
currentNode = currentNode.next;
}
preNode = currentNode.next;
}
length--;
}
}
/*
是否是空
*/
this.isEmpty = function () {
return length === 0;
}
/*
查找是否有元素
*/
this.indexOf = function (element) {
var currentNode = head;
var index = -1;
while (currentNode){
index++;
if(currentNode.element == element){
return index;
}
currentNode = currentNode.next;
}
return -1;
}
/*
取index下标的值
*/
this.elementAt = function (index) {
var currentNode = head;
var count = 0;
while (count < index){
count ++;
currentNode = currentNode.next;
}
return currentNode.element;
}
/*
加入元素到指定的index
*/
this.addAt = function (index, element) {
if(index >=0 && index <= length){
var currentNode = head;
var count = 0;
while (count < index-1){
count++;
currentNode = currentNode.next;
}
var newNode = new Node(element);
newNode.next = currentNode.next;
currentNode.next = newNode;
}
}
/*
删除index指定的节点
*/
this.removeAt = function (index) {
if(index >=0 && index <= length){
var currentNode = head;
var count = 0;
var preNode;
while (count < index){
count ++;
preNode = currentNode;
currentNode = currentNode.next;
}
preNode.next = currentNode.next;
length--;
}
}
}
/*
链表中的节点
*/
var Node = function (element) {
this.element = element;
this.next = null;
}
JavaScript 单链表实现
最新推荐文章于 2023-04-12 20:00:55 发布