class Node{//节点类;date表示存放数据,left为左指针域,right为右指针域
constructor(date){
this.date = date;
this.left = null;
this.right = null;
}
}
class List{//链表类
constructor(){
this.size = 0;
this.head = new Node('head');
this.rightNode = '';
}
isEmpty(){//判断是否为空
if(this.size===0){
console.log('链表为空');
}else{
console.log('链表不为空');
}
}
getLength(){//获取链表长度
return this.size;
}
//获取单链表的最后一个节点
findLast() {//查找最后一个节点
let rightNode = this.head;
while(rightNode.right) {
rightNode = rightNode.right;
}
return rightNode;
}
appendNode(n){//在链表的尾端插入节点
let oldNode = this.findLast();
let newNode = new Node(n);
oldNode.left = oldNode.left;
oldNode.right = newNode;
newNode.left = oldNode;
this.size++;
}
display(){//显示链表
let list = '';
let head = this.head;
while(head){
list+=head.date;
head=head.right;
if(head){
list+='->';
}
}
console.log(list);
}
findNode(n){//查找n
let rightNode = this.head;
while(rightNode&&rightNode.date!==n){
rightNode = rightNode.right;
}
return rightNode;
}
insertNode(n,x){//插入x
let n1 = this.findNode(n);
if(!n1){
console.log('n不存在');
}
let newNode = new Node(x);
newNode.left = n1;
newNode.right = n1.right;
n1.right = newNode;
}
deleteNode(n){//删除n
let n1 = this.findNode(n);
n1.left.right = n1.right;
}
ReplaceNode(n,x){//替换n
let n1 = this.findNode(n);
n1.date = x;
}
}
var arr=[1,3,5,7,9];
var mylist = new List();
for(let i = 0;i<arr.length;i++){
mylist.appendNode(arr[i]);
}
mylist.display();
console.log( '查找节点',mylist.findNode(3));
mylist.insertNode(5,6);
console.log('插入节点');
mylist.display();
mylist.deleteNode(5);
console.log('删除节点后')
mylist.display();
mylist.ReplaceNode(6,0);
console.log('替换数据后:')
mylist.display();
console.log('链表长度:',mylist.getLength());
mylist.isEmpty();
JavaScript创建一个双向链表并实现基本操作
最新推荐文章于 2024-08-04 16:33:59 发布