提示💡 维护一个 头结点、尾结点、链表长度; 维护尾结点,尾结点可 O(1) 复杂度插入; class LinkNode { val: number; next: LinkNode | null; constructor(val: number, next: LinkNode) { this.val = val; this.next = next; } } class MyLinkedList { size: number; head: LinkNode | null; tail: LinkNode | null; constructor() { this.head = null; // head节点 this.tail = null; // 尾节点 this.size = 0; // 长度 } getNode(index: number): LinkNode { let cur = new LinkNode(0, this.head); // 哨兵节点 while (index-- >= 0) cur = cur.next; return cur; } get(index: number): number { if (index < 0 || index >= this.size) return -1; return this.getNode(index).val; } addAtHead(val: number): void { let node = new LinkNode(val, this.head); this.head = node; this.size++; // 没有尾结点,说明只有一个 node 节点,记录尾结点 if (!this.tail) this.tail = node; } addAtTail(val: number): void { let node = new LinkNode(val, null); this.size++; // 有尾结点 if (this.tail) { // 更新尾结点 this.tail.next = node; this.tail = node; return; } // 没有尾结点,说明只有一个节点 this.tail = node; this.head = node; } addAtIndex(index: number, val: number): void { if (index > this.size) return; if (index <= 0) { this.addAtHead(val); return; } if (index === this.size) { this.addAtTail(val); return; } // 其他情况 let node = this.getNode(index - 1); node.next = new LinkNode(val, node.next); this.size++; } deleteAtIndex(index: number): void { if (index < 0 || index >= this.size) return; // 删除头结点 if (index === 0) { this.head = this.head.next; this.size--; return; } // 删除中间、尾节点 let node = this.getNode(index - 1); node.next = node.next.next; // 如果 index 是尾结点,更新尾结点 if (index === this.size - 1) { this.tail = node; } this.size--; } }