class LinkedList {
constructor(data) {
this.header = null;
this.data = data;
this.next = null;
this.length = 0;
}
// 尾部插入
append(element) {
let newNode = new LinkedList(element);
if (this.length == 0) {
this.header = newNode;
} else {
let current = this.header;
while (current.next) {
current = current.next;
}
current.next = newNode;
}
this.length = this.length + 1;
}
toString() {
let current = this.header;
let str = "";
while (current) {
str += current.data + " ";
current = current.next;
}
return str;
}
// 插入
insert(position, element) {
if (position < 0 || position >= this.length) {
return false;
}
let newNode = new LinkedList(element);
if (position == 0) {
let oldNode = this.header;
this.header = newNode;
newNode.next = oldNode;
} else {
let current = this.header;
for (let i = 0; i < position; i++) {
current = current.next;
}
let prv = this.header;
for (let i = 0; i < position - 1; i++) {
prv = prv.next;
}
prv.next = newNode;
newNode.next = current;
}
this.length = this.length + 1;
}
removeAt(position) {
if (position < 0 || position >= this.length) {
return false;
}
if (position == 0) {
this.header = this.header.next;
}
if (position > 0 && position <= this.length - 1) {
let current = this.header;
for (let i = 0; i < position; i++) {
current = current.next;
}
let prv = this.header;
for (let i = 0; i < position - 1; i++) {
prv = prv.next;
}
if (current.next) {
prv.next = current.next;
} else {
prv.next = null;
}
}
this.length = this.length - 1;
}
remove(element) {
let res = -1;
let current = this.header;
for (let i = 0; i < this.length; i++) {
if (current.data === element) {
res = i;
}
current = current.next;
}
if (res != -1) {
this.removeAt(res);
}
}
upDate(position, element) {
if (position < 0 || position >= this.length) {
return null;
}
let current = this.header;
for (let i = 0; i < position; i++) {
current = current.next;
}
current.data = element;
}
get(position) {
if (position < 0 || position >= this.length) {
return null;
}
let current = this.header;
for (let i = 0; i < position; i++) {
current = current.next;
}
return current.data;
}
indexOf(element) {
let current = this.header;
let res = -1;
for (let i = 0; i < this.length; i++) {
if (current.data === element) {
res = i;
break;
}
current = current.next;
}
return res;
}
}
javaScript链表类的封装
最新推荐文章于 2023-04-30 22:49:41 发布
本文详细介绍了如何使用JavaScript实现链表数据结构,包括在链表尾部插入元素、在指定位置插入和删除元素、更新元素以及查找元素的方法。这些操作对于理解链表的基本原理和应用至关重要。
971

被折叠的 条评论
为什么被折叠?



