//节点类
class Node{
constructor(data){
this.data = data;
this.prev = null;
this.next = null;
}
}
//单链表类
class SingleList{
constructor(){
this.size = 0;
this.head = new Node('head');//表头节点
this.currNode = ''//当前的节点指针
}
//判断当前列表是否为null
isEmpty(){
return this.size === 0
}
//获取单链表的长度
getLength(){
return this.size
}
// 显示当前节点
showNode(){
console.log(this.currNode.data)
}
//遍历单链表
displayList(){
let result = ''
let currNode = this.head
while(currNode){
result += currNode.data;
currNode = currNode.next
if(currNode){
result += '->'
}
}
console.log(result)
}
//获取单链表的最后一个节点
findList(){
let currNode = this.head
while(currNode.next){
currNode = currNode.next
}
return currNode
}
//倒序遍历单链表
lastDisplay(){
let currNode = this.findList();
let result = ''
while(currNode){
result += currNode.data;
currNode = currNode.prev;
if(currNode){
result +='->'
}
}
console.log(result)
}
//在列表中查找某元素
findNode(item){
let currNode = this.head
while((item) && (item !== currNode.data)){
currNode = currNode.next
}
return currNode
}
//在列表中插入节点
insertNode(item,element){
let itemNode = this.findNode(item)
if(!itemNode){
return
}
let newNode = new Node(element)
newNode.next = itemNode.next
itemNode.next = newNode
return newNode
this.size++
}
//在链表尾部添加节点
appendNode(element){
let currNode = this.findList()
let newNode = new Node(element)
currNode.next = newNode
newNode.prev = currNode
this.size++
}
}
module.exports.SingleList = SingleList
测试代码如下:
var List = require('./singlelist')
let mylist = new List.SingleList();
let arr = [3, 4, 5, 6, 7, 8, 9,10,22];
for(let i=0; i<arr.length; i++){
mylist.appendNode(arr[i]);
}
mylist.displayList();
mylist.lastDisplay();