解题通用思路:

  1. 遍历法
    1. 通过引入一个另外的变量p或者cur等,来遍历整个链表,然后达到去重或者删除某个元素。需要注意最终返回的需要是原链表head,因为遍历修改了原链表
  2. 快慢指针法
    1. 一般出现在环形链表中,或者判断链表是否有环。两个指针。
  3. 分割
    1. 分割链表时,需要用一个新的指针变量去指。如果要分割两端,就把新的变量指针的某一个位置next指为空。同时要之前预先保留那个指针。
      1. let cur = prevQ; let next = cur.next; cur.next = null;
  4. 舍得用变量

    1. 不要担心变量的个数过多,
    2. head 有可能需要改动时,先增加一个 假head,返回的时候直接取 假head.next,这样就不需要为修改 head 增加一大堆逻辑了。
    3. 不一定是cur ,cur.next 还有可能是cur.next cur.next.next 注意的是都要while去判断是否存在。

      概念

      链表:节点+指针

      实现:

  5. 节点+指针

  6. 双数组 data数组以及nex数组

应用场景:

  1. 操作系统底层分配
  2. LRU算法
  3. Map底层实现
    1. react diff也是map结构