function Node(data) {
this.data = data;
this.next = null;
}
function CirSingleList() {
this.head = new Node('head');
this.length = 0;
}
CirSingleList.prototype = {
// 寻找一个节点
findElement: function(element) {
let head = this.head, len = this.length;
let count = 0;
while( (count++) !== len && head.data != element ) {
head = head.next;
}
return head;
},
// 寻找最后一个节点
findLastElement: function() {
let head = this.head, len = this.length;
let count = 0;
while ( (count++) !== len ) {
head = head.next;
}
return head;
},
// 尾巴添加节点
pushElement: function(element) {
let newNode = new Node(element);
let lastNode = this.findLastElement();
lastNode.next = newNode;
newNode.next = this.head.next;
this.length++;
},
// 添加节点
insertElement: function(item, element) {
let head = this.head, len = this.length;
let searchNode = this.findElement(item);
let newNode = new Node(element);
let lastNode = this.findLastElement();
if (this.isEmpty()) {
head.next = newNode;
newNode.next = newNode;
} else {
if (searchNode === lastNode) {
this.pushElement(element);
return;
} else {
newNode.next = searchNode.next;
searchNode.next = newNode;
}
}
this.length++;
},
// 删除节点
removeElement: function(element) {
let head = this.head;
let lastNode = this.findLastElement();
let searchNode = this.findElement(element);
if (head.next !== searchNode) {
head = head.next;
}
if (head == this.head.next) {
if (this.length == 1) {
this.head.next = null;
} else {
this.head.next = searchNode.next;
lastNode.next = searchNode.next;
}
} else {
head.next = searchNode.next;
}
this.length--;
},
// 判空
isEmpty: function() {
return this.length === 0;
},
// 清空
clear: function() {
this.head.next = null;
this.length = 0;
}
}
JavaScript 实现循环单链表
最新推荐文章于 2023-04-07 22:49:45 发布