链表
链表是一组节点组成的集合,每个节点都使用一个对象的引用指向他的后一个节点。它分为单向链表、双向链表、单向循环链表和双向循环链表。
- 插入节点:
在需要插入节点的位置的节点(前驱)指向新插入的节点,将新节点指向前驱本来指向的节点。 - 删除节点:
将待删节点的前驱指向待删节点指向的节点,将待删除节点的指向设置为 null - 链表设计:
两个类,一个用来表示节点【Node】,另一个类提供删除、插入节点等操作【LinkedList】
本文主要写的是关于单向链表。
function Node(element) {
this.element = element // 当前节点元素
this.next = null // 下一个节点链接
}
function LList () {
this.head = new Node('head)
this.insert = insert
this.remove = remove
this.find = find
this.findPrev = findPrev
this.display = display
}
// 查找指定节点
function find(item) {
var curentNode = this.head
while (item.element != item) {
currentNode = currentNode.next
}
return currentNode
}
// 插入节点
function insert(newElement, item) {
let newNode = new Node(newElement)
let currentNode = this.find(item)
newNode.next = currentNode.next
currentNode.next = newNode
}
// 显示链表
function display () {
var currNode = this.head;
while ( currNode.next !== null ){
console.log( currNode.next.element );
currNode = currNode.next;
}
}
// 查找前一个节点
function findprev(item) {
let currentNode = new Node('head')
while ( currentNode.next !== null && currentNode.next.element != item) {
currentNode = currentNode.next
}
}
// 删除节点
function remove ( item ) {
var prevNode = this.findPrev( item )
if( prevNode.next !== null ){
prevNode.next = prevNode.next.next
}
}