// 双向链表 // 节点 export class Node2 { [x: string]: any; constructor(data: any) { this.data = data; // 数据 this.next = null; // 指向下一个节点的指针 this.prev = null; // 指向上一个节点 } } // 双向链表 export class LinkedList2 { [x: string]: any; constructor(head: any = null) { if (head) { this.head = new Node2(head); } else { this.head = null; } } // 添加节点(尾部添加) append(data: any) { const newNode = new Node2(data); const currNode = this.getLast(); if (currNode) { currNode.next = newNode; newNode.prev = currNode; } else { this.head = newNode; } } // 查找节点 find(data: any) { let currNode = this.head; while (currNode && currNode.data !== data) { currNode = currNode.next; } return currNode; } // 插入节点 // target:链表中存在的节点值 // data:要插入的节点值 // data插入的位置在target的后面 insert(target: any, data: any) { const tagNode = this.find(target); if (!tagNode) return; // 如果目标节点不存在,则返回 const newNode = new Node2(data); if (tagNode.next) { newNode.next = tagNode.next; newNode.prev = tagNode; tagNode.next = newNode; newNode.next.prev = newNode; } else { // 如果目标节点是最后一个节点 tagNode.next = newNode; newNode.prev = tagNode; } } // 返回链表的最后一个节点 getLast() { let lastNode = this.head; if (lastNode) { while (lastNode.next) { lastNode = lastNode.next; } } return lastNode; } // 转数组 toArr() { let p = this.head; const arr = []; while (p) { arr.push(p.data); p = p.next; } return arr; } }