使用JS对链表数据结构的实现
- 看数据结构的书大多对各种数据结构算法的实现都是使用c,所以自己用JS写了一个,也可以加深对数据结构的理解
class Node {
constructor(data) {
this.data = data;
this.next = null;
}
}
class List {
constructor() {
this.head = new Node('head');
};
prevInsert(data) {
var newNode = new Node(data);
newNode.next = this.head.next;
this.head.next = newNode;
};
show(index) {
if (index) {
var currNode = this.head;
for (let i = 0; i < index; i++) {
var nextNode = currNode.next;
currNode = nextNode;
}
console.log(currNode)
} else {
var currNode = this.head;
var nextNode;
while (currNode.next) {
nextNode = currNode.next;
currNode = nextNode;
console.log(currNode)
}
}
};
nextInsert(data) {
var currNode = this.head;
var nextNode;
while (currNode.next) {
nextNode = currNode.next;
currNode = nextNode;
}
if (!currNode.next) {
currNode.next = new Node(data)
}
};
find(index) {
var currNode = this.head;
var nextNode;
var flag = 1;
if (typeof(index) === 'number' && index > 0) {
while (1) {
nextNode = currNode.next;
currNode = nextNode;
if (flag == index) {
console.log(currNode);
return;
}
if (!currNode.next) {
console.log('索引大于链表长度');
return;
}
flag++;
}
} else {
while (1) {
nextNode = currNode.next;
currNode = nextNode;
if (currNode.data == index) {
console.log(currNode);
return;
}
if (!currNode.next) {
console.log('查找内容不在链表中');
return;
}
}
}
};
indexInsert(index, data) {
var currNode = this.head;
var nextNode;
var flag = 0;
while (1) {
nextNode = currNode.next;
currNode = nextNode;
if (flag == index - 1) {
var newNode = new Node(data);
newNode.next = currNode.next
currNode.next = newNode;
return;
}
flag++
}
};
delete(index) {
var prevNode;
var currNode = this.head;
var nextNode;
var flag = 1;
if (typeof(index) === 'number') {
while (1) {
prevNode = currNode;
nextNode = currNode.next;
currNode = nextNode;
if (flag === index) {
prevNode.next = currNode.next
return;
}
if (!currNode.next) {
console.log('索引超出链表长度');
return;
}
flag++
}
} else {
while (1) {
prevNode = currNode;
nextNode = currNode.next;
currNode = nextNode;
if (currNode.data === index) {
prevNode.next = currNode.next
return;
}
if (!currNode.next) {
console.log('链表没有此元素');
return;
}
}
}
};
}
var list = new List();
list.nextInsert('fir');
list.nextInsert('sec');
list.nextInsert('thr');
list.nextInsert('four');
list.delete('thr')
list.show()