export type GeneralDoubleLinkedNode = DoubleLinkedNode | null; export interface DoubleLinkedNode { /** * 值域 */ val: T; /** * 后继节点 */ next?: GeneralDoubleLinkedNode; /** * 前驱节点 */ prev?: GeneralDoubleLinkedNode; } /** * 数组转双向链表 * @param arr 数据源 * @returns */ export function arrToDoubleLinkedList(arr: T[]): { head: GeneralDoubleLinkedNode; tail: GeneralDoubleLinkedNode; } { if (!Array.isArray(arr) || arr.length === 0) { return { head: null, tail: null }; } let head: GeneralDoubleLinkedNode = null; let tail: GeneralDoubleLinkedNode = null; arr.forEach((item) => { let node: GeneralDoubleLinkedNode = { val: item, next: null, prev: null, }; if (head === null) { head = node; tail = node; } else { tail!.next = node; node.prev = tail; tail = node; } }); head!.prev = tail; tail!.next = head; return { head, tail }; }