class Node {
constructor(data) {
this.data = data;
this.next = null;
}
}
class LinkedList {
constructor() {
this.length = 0;
this.head = null;
}
append(data) {
const newNode = new Node(data);
if (this.length === 0) {
this.head = newNode;
} else {
let currentNode = this.head;
while (currentNode.next !== null) {
currentNode = currentNode.next;
}
currentNode.next = newNode;
}
this.length++;
}
insert(position, data) {
if (position < 0 || position > this.length) return false;
const newNode = new Node(data);
if (position === 0) {
newNode.next = this.head;
this.head = newNode;
} else {
let currentNode = this.head;
let previousNode = null;
let index = 0;
while (index++ < position) {
previousNode = currentNode;
currentNode = currentNode.next;
}
newNode.next = currentNode;
previousNode.next = newNode;
}
this.length++;
return newNode;
}
getData(position) {
if (position < 0 || position >= this.length) return null;
let currentNode = this.head;
let index = 0;
while (index++ < position) {
currentNode = currentNode.next;
}
return currentNode.data;
}
indexOf(data) {
let currentNode = this.head;
let index = 0;
while (currentNode) {
if (currentNode.data === data) {
return index;
}
currentNode = currentNode.next;
index++;
}
return -1;
}
update(position, data) {
if (position < 0 || position >= this.length) return false;
let currentNode = this.head;
let index = 0;
while (index++ < position) {
currentNode = currentNode.next;
}
currentNode.data = data;
return currentNode;
}
removeAt(position) {
if (position < 0 || position >= this.length) return null;
let currentNode = this.head;
if (position === 0) {
this.head = this.head.next;
} else {
let previousNode = null;
let index = 0;
while (index++ < position) {
previousNode = currentNode;
currentNode = currentNode.next;
}
previousNode.next = currentNode.next;
}
this.length--;
return currentNode;
}
remove(data) {
return this.removeAt(this.indexOf(data));
}
isEmpty() {
return this.length === 0;
}
size() {
return this.length;
}
toString() {
let currentNode = this.head;
let result = '';
while (currentNode) {
result += currentNode.data + ' ';
currentNode = currentNode.next;
}
return result;
}
}
js实现单向链表
最新推荐文章于 2021-12-15 16:29:12 发布