[JavaScript 刷题] 链表II,翻转链表,搜索,按值删除

Posted GoldenaArcher

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了[JavaScript 刷题] 链表II,翻转链表,搜索,按值删除相关的知识,希望对你有一定的参考价值。

以单链表的功能为主。

Node

class Node {
  constructor(value) {
    this.value = value;
    this.next = null;
  }
}

构造函数

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

isEmpty

判断链表是否为空,可以通过直接判断 head 是否为 null 进行实现。

时间复杂度为 O ( 1 ) O(1) O(1)

class LinkedList {
  // 省略其他实现

  isEmpty() {
    return this.head === null;
  }
}

插入实现

总共有三种:

  • 在头部插入,insertAtHead()
  • 在尾部插入,insertAtTail()
  • 在指定索引插入,insertAtTail()

头插

直接新建一个新的 Node,将链表原本的 Head 指向新的 Node,将链表的 Head 指向新的 Node

时间复杂度为 O(1)

图解如下:

  1. 原本的链表

    2 为原本的 Head

    2
    3
    Head
    null
  2. 新建一个 Node 作为需要插入到链表头部的 Node。

    1
    2
    3
    null
    Head
    null
  3. 将原本的 Node 2 链接到新建的 Node 1

    1
    2
    3
    null
    Head
  4. 更新链表的 Head

    以上是关于[JavaScript 刷题] 链表II,翻转链表,搜索,按值删除的主要内容,如果未能解决你的问题,请参考以下文章

    202005leetcode刷题记录

    #leetcode刷题之路25- k个一组翻转链表

    LeetCode Java刷题笔记—142. 环形链表 II

    Leetcode刷题Python142.环形链表II

    LeetCode Java刷题笔记—25. K 个一组翻转链表

    LeetCode 92 Reverse Linked List II(翻转链表II)(Linked List)(*)