Leetcode two pointer

9/5/2023 Data structure

# 双指针

# Detect circle

# Floyd’s Cycle-Finding Algorithm

  1. 使用一个快指针(step == 2),一个慢指针(step == 1),从链表的头开始出发
  2. 如果二者相遇(一定存在环),则将慢指针设置在链表头,快指针保持不动
  3. 二者再次相遇位置就是环的起点

# 反转连续链表

不使用栈,仅遍历一次列表的方法

![reversed link listed](D:\lzyblog\source\reversed link listed.jpg)

算法的基本思想是:

  1. 计算围绕列表中的三个元素展开,每次让最右侧元素移动到最左边,其余元素右移
  2. 中间的元素(B)不动,仅改变其next指针指向的元素,新指向的元素就是下一个被提前的元素(E)
  3. 最右侧的元素(C或者D)的next指针指向最左侧元素(B或者C)
  4. 最后不动的元素(A)指向需要被移动过来的元素(D)
  5. 重复2~3