链表
一、设计一个基于对象的链表
1.1 node类
function Node(element){
this.element = element;
this.next = null
}
1.2 LinkedList 类
function LList() {
this.head = new Node('head')
this.find = find
this.insert = insert
this.findPrevious = findPrevious
this.remove = remove
this.display = display
}
find方法
function find(item){
var currNode = this.head
while(currNode.element != item){
currNode = currNode.next
}
return currNode
}
insert方法
function insert(newElement, item){
var newNode= new Node(newElement)
var current = this.find(item)
newNode.next = current.next
current.next = newNode
}
display方法
function display(){
var currNode = this.head
while(!(currNode.next == null)){
console.log(currNode.next.element)
currNode = currNode.next
}
}
findPrevious 方法
function findPrevious(item){
var currNode = this.head
while(!(currNode.next == null) && (currNode.next.element != item)){
currNode = currNode.next
}
return currNode
}
remove方法
function remove(item){
var prevNode = this.findPrevious(item)
if(!(prevNode.next == null)){
prevNode.next = prevNode.next.next
}
}
二、双向链表
node类
function Node(element){
this.element = element;
this.next = null
this.previous = null
}
insert方法
function insert(newElement, item){
var newNode= new Node(newElement)
var current = this.find(item)
newNode.next = current.next
newNode.previous = current
current.next = newNode
}
remove方法
function remove(item){
var currNode = this.find(item)
if(!(currNode.next == null)){
currNode.previous.next = currNode.next
currNode.next.previous = currNode.previous
currNode.next = null
currNode.previous = null
}
}
findLast方法
function findLast(){
var currNode = this.head
while(!(currNode.next == null)){
currNode = currNode.next
}
return currNode
}
displayReverse方法
function displayReverse(){
var currNode = this.head
currNode = this.findLast()
while(!(currNode.previous == null)){
console.log(currNode.element)
currNode = currNode.previous
}
}
三、反转链表
var reverseList = function(head) {
var list = head;
var p = list;
var q = null;
if(p == null)
return null;
while(p.next !== null) {
q = p.next;
p.next = q.next;
q.next = list;
list = q;
}
return list;
};