LinkedList

链表

链表操作基本都需要prev指针, 搭配dummy用于操作头节点.

删除

交换

插入、归并

取中点

876. 链表的中间结点

综合

特殊位置

通常搭配多指针使用

排序

插入排序

归并排序:注意找中点时的起点和循环终止条件的组合。

静态链表

技巧

分析

取中点

876. 链表的中间结点

区分起点,其实这两种只是置换了下节点数量的奇偶性。

  • 从dummy开始
  • 从第一个节点开始

区分循环终止条件,注意这两种,在偶数情况下都是找到中点左边节点。

  • fast->next != nullptr && fast->next->next != nullptr 奇数找到中点前置节点
  • fast != nullptr && fast->next != nullptr 奇树找到中点。

总结

  • 从dummy开始:两种都不用特判空,根据要求使用即可。
  • 从第一个节点开始:注意,从第一节点开始和 fast->next != nullptr && fast->next->next != nullptr 一起时,fast可能初始化为nullptr,注意特判。所以不推荐这种组合。

从dummy开始

这是逻辑最清晰的一种方式

如果循环终止条件为

终止条件: fast->next != nullptr && fast->next->next != nullptr

  • 奇数情况下,会到中点前置节点。
  • 偶数情况下,会找到中点左边节点。

终止条件 fast != nullptr && fast->next != nullptr

  • 奇数情况下,会到中点。
  • 偶数情况下,会到中点左边节点。

从第一个节点开始

注意第一个节点判空,奇偶情况和从dummy开始的情况对调即是答案。


LinkedList
https://messenger1th.github.io/2024/07/24/LeetCode/LinkedList/
作者
Epoch
发布于
2024年7月24日
许可协议