一种是类里加一个指向尾部最后一个元素指针。通过他添加一个元素到队列最后。
一种是每次增一个元素都从头开始遍历直到最后一个,然后添加。打开出来有单链表结构是一样的。除了上面的 多了一个队尾指针。
class Node {
//单个结点
data;
next;
constructor(value) {
this.data = value;
this.next = null;
}
}
//单链表
class LinkList {
head;/* 第一个元素*/
length = 0; //链表长度
tail;
//判断链表是否为空
isEmpty() {
return this.length === 0;
}
constructor(node = null) {
this.head = node; /*链表头*/
this.tail = node
}
/**
* 尾部插入数据
* @param {*} ele
*/
append(ele) {
let newNode = new Node(ele);
let currentNode;
if (this.head === null) {
this.head = newNode;
} else {
currentNode = this.head;
while (currentNode.next) {
currentNode = currentNode.next;
}
currentNode.next = newNode;
this.tail = newNode;
}
this.length++;
}
//尾部插入元素
insert(data) {
let newNode = new Node(data);
if (this.head === null) {
this.head = newNode;
this.tail = newNode;
} else {
this.tail.next = newNode;
this.tail = newNode;
// this.tail=
}
this.length++
return this;
}
toString() {
let nodes = [];
let current = this.head;
while (current) {
nodes.push(current.data);
current = current.next;
}
return nodes.join(",")
}
}
function newLinklist() {
let linklist = new LinkList();
// console.log(linklist)
linklist.insert(4);
linklist.insert(15);
linklist.insert(6);
linklist.insert(7);
console.log(linklist.toString())
console.log(linklist.length)
console.log(linklist.head.data)
return linklist;
// console.log(linklist.tail.data)
}
function newLinklist2() {
let linklist = new LinkList();
// console.log(linklist)
linklist.append(4);
linklist.append(15);
linklist.append(6);
linklist.append(7);
console.log(linklist.toString())
console.log(linklist.length)
console.log(linklist.head.data)
console.log(linklist.tail.data)
return linklist;
}
let l1 = newLinklist()
let l2 = newLinklist2()
console.log(l1, l2)