// 节点构造函数
function Node (value) {
this.next = null;
this.value = value;
}
// 链表类
function LinkedList () {
this.head = new Node('head');
// 末尾加节点
this.append = (value) => {
let currentNode = this.head;
while(currentNode.next) {
currentNode = currentNode.next;
}
currentNode.next = new Node(value);
}
// 查找节点
this.find = (value) => {
let currentNode = this.head;
while(currentNode && currentNode.value !== value) {
currentNode = currentNode.next;
}
return currentNode;
}
// 插入节点
this.insert = (prevNodeValue, value) => {
const prevNode = this.find(prevNodeValue);
if(prevNode) {
const prevNext = prevNode.next;
prevNode.next = new Node(value);
prevNode.next.next = prevNext
} else {
console.log('没有找到要插入的节点')
}
}
// 寻找一个节点的前一个节点
this.findPrevNode = (value) => {
let currentNode = this.head;
while(currentNode.next && currentNode.next.value !== value) {
currentNode = currentNode.next;
}
if(currentNode.next && currentNode.value !== 'head') {
return currentNode;
} else if(currentNode.value == 'head') {
return currentNode;
} else {
console.log('没有找到当前节点');
return null;
}
}
// 删除节点
this.remove = (value) => {
const prevNode = this.findPrevNode(value);
const originNextNode = prevNode.next.next;
// const node = this.find(value);
if(prevNode) {
prevNode.next = originNextNode;
}
}
// 展示链表
this.show = () => {
let currentNode = this.head.next;
while(currentNode) {
console.log(currentNode.value);
currentNode = currentNode.next;
if(currentNode) {
console.log('↓');
}
}
}
}
// 链表类的使用
var linkedList = new LinkedList();
linkedList.append(1);
linkedList.append(2);
linkedList.insert(1, 3);
linkedList.insert(2, 4);
linkedList.remove(2);
linkedList.remove(1);
linkedList.insert(3, 5);
linkedList.show();