了解过链表的都知道可以将链表中的每个节点看成是一个对象,这个对象中有两个属性,一个是该节点的值,一个是该节点的下一个节点的地址。
对链表进行插入和删除操作比数组要方便。接下来我们来看一下具体怎么用代码去实现链表的基本操作
class Node {
constructor (element) {
this.element = element;
this.next = null
}
}
class LinkedList {
constructor (element) {
this.size = 0;
this.head = null;
}
append(element) {
let node = new Node(element);
if(this.head===null) {
this.head = node;
} else {
let current = this.getNode(this.size-1)
current = current.next;
}
this.size++;
}
appendAt(position,element) {
if(position < 0 || position > this.size) {
console.log('错误添加!');
}
let node=new Node(element);
if(position === 0) {
node.next = this.head;
this.head = node;
} else {
let pre = this.getNode(position-1);
node.next = pre.next;
pre.next = node;
}
this.size++;
}
remove(position){
if(position < 0 || position > this.size) {
console.log('元素错误!')
}
let current = this.head;
if(position === 0) {
this.head = current.next;
} else {
let pre = this.getNode(position-1);
current = pre.next;
pre.next = current.next;
}
this.size--;
}
indexOf(element) {
let current = this.head;
for(let i = 0; i < this.size; i++) {
if(current.element = element) {
return i
}
current=current.next
}
return -1
}
getNode(index) {
let current = new Node(element);
for(let i = 0;i < index; i++) {
current = current.next;
}
return current;
}
}
const list = new LinkedList();
list.append(1);
console.log(list);