首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

使链表在ES6中可迭代

在ES6中,可以通过Symbol.iterator方法使链表可迭代。迭代器是一种对象,它定义了一个无参数的next()方法,该方法返回一个具有value和done属性的对象。value属性表示当前迭代的值,done属性表示迭代是否结束。

要使链表可迭代,需要在链表的原型对象上实现Symbol.iterator方法。该方法返回一个迭代器对象,该对象包含一个next()方法。

下面是一个示例代码:

代码语言:txt
复制
class Node {
  constructor(value) {
    this.value = value;
    this.next = null;
  }
}

class LinkedList {
  constructor() {
    this.head = null;
    this.tail = null;
  }

  add(value) {
    const newNode = new Node(value);
    if (!this.head) {
      this.head = newNode;
      this.tail = newNode;
    } else {
      this.tail.next = newNode;
      this.tail = newNode;
    }
  }

  [Symbol.iterator]() {
    let currentNode = this.head;
    return {
      next: () => {
        if (currentNode) {
          const value = currentNode.value;
          currentNode = currentNode.next;
          return { value, done: false };
        } else {
          return { done: true };
        }
      }
    };
  }
}

const list = new LinkedList();
list.add(1);
list.add(2);
list.add(3);

for (const item of list) {
  console.log(item);
}

在上面的代码中,我们定义了一个Node类表示链表的节点,LinkedList类表示链表。在LinkedList类中,我们实现了add方法用于向链表中添加节点。在LinkedList类的原型对象上实现了Symbol.iterator方法,返回一个迭代器对象。迭代器对象的next()方法会依次返回链表中的节点值,直到链表结束。

这样,我们就可以使用for...of循环来迭代链表中的值。在每次迭代中,会依次输出1、2、3。

腾讯云相关产品和产品介绍链接地址:

  • 云服务器(CVM):https://cloud.tencent.com/product/cvm
  • 云数据库 MySQL 版(CDB):https://cloud.tencent.com/product/cdb
  • 云原生应用引擎(TKE):https://cloud.tencent.com/product/tke
  • 云存储(COS):https://cloud.tencent.com/product/cos
  • 人工智能机器翻译(TMT):https://cloud.tencent.com/product/tmt
  • 物联网开发平台(IoT Explorer):https://cloud.tencent.com/product/iothub
  • 移动推送服务(TPNS):https://cloud.tencent.com/product/tpns
页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

领券