经典题

1、单链表反转
剑指 Offer 24. 反转链表
反转链表 II

2、链表中环的检测

3、两个有序的链表合并

  1. 链表题采用哨兵结点省去了很多判断,值得推荐
  2. 位操作符 >> (3 >> 1 相当于 Math.floor(3 / 2))。用位操作简洁高效
  3. 十进制转二进制. 整数除以2, 辗转相除。然后按照余数倒序,高位补0 4 二进制转10进制,如0000 1001. 从右往左: 1 x 2^0 + 0 + 0 + 1 x 2^3 = 9
  4. merge递归处,因为是函数调用栈,可以用栈的 后进先出的特点,去理解此处递归调用中merge操作对两两链表的合并

4、删除链表倒数第 n 个结点
5、求链表的中间结点

6、利用快慢指针检测单向链表中是否存在环
https://blog.csdn.net/xgjonathan/article/details/18034825

扩展:Floyd判圈算法(龟兔赛跑)

总结题的类型:

  • 判断链表中是否有环
  • 计算环的长度
  • 找到环的开始节点
  • 为什么快慢指针一定会相遇
  • 为什么检测环时,快指针的步长是2?可以是其他数吗

    链表与数组的对比