链表实现队列

/**
 * 1.单项链表实现队列,但要同时记录head和tail 
 * 2.要从tail入队,head出对, 否则出队时,tail不好定位
 * 2.单独记录length,不可遍历链表获取length
 */
class MyQueue {
  head = null; //
  tail = null; //
  len = 0;
  add(n) {
    let newNode = {
      value: n,  // 因为是最后一级,没有next
    };
    // 处理head 如果入队的时候头是空的,给头直接赋值
    if (this.head == null) {
      this.head = newNode;
    }
    // 处理tail
    let tailNode = this.tail;
    if (tailNode) {
      tailNode.next = newNode;
    }
    this.len++;
    this.tail = newNode; 
  }
  delete() {
    let headNode = this.head;
    if (headNode == null) return null;
    if (this.len == 0) return null;
    // 取值
    const value = headNode.value;
    // 处理head
    this.head = headNode.next;
    this.len--;
    headNode = null
    return value
  }
  length() {
    // length 单独存储,不能通过遍历链表来获取length(否则时间复杂度O(n))
    return this.len;
  }
}

 

posted on 2023-07-01 12:10  浅唱年华1920  阅读(24)  评论(0编辑  收藏  举报