2026-07-31 14:29:08
双指针是一种常用的算法技巧,主要用于优化数组、字符串和链表等数据结构的操作。其核心思想是通过两个指针在数据结构上移动,以降低时间或空间复杂度。以下是双指针的详细解析:
双指针的核心作用同向指针(快慢指针):如链表反转、检测环。
反向指针(相向指针):如字符串反转、两数之和。
指针是否先移动(如快指针先走n步)。
是否需要排序或结合其他操作(如数组扩容后逆向填充)。
检测链表环及环长度(快慢指针)。
链表相交(计算长度差,快指针先走差值步)。
数组/字符串的删除或替换(快指针覆盖慢指针)。
N数之和(排序后双指针逼近目标值)。
快慢指针覆盖删除:
题目:
相向指针反转字符串:
题目:
逆向填充替换字符:
题目:替换数字为"number"(如"a1b2" → "anumberbnumber")。方法:从右向左遍历,动态扩容数组并填充,避免覆盖问题。
去除多余空格:
题目:
快慢指针去除多余空格。
反转整个字符串。
反转每个单词。
反转链表:
题目:
删除倒数第N个节点:
题目:
链表相交:
题目:
检测环并找入口:
题目:
快慢指针相遇证明有环。
慢指针回到起点,快慢指针同步移动,再次相遇点为环入口。
题目:
双指针的核心在于通过控制指针的移动方向和速度,减少冗余操作。其应用场景包括:
掌握双指针需理解数据结构的特性(如数组的连续性、链表的非连续性),并通过练习熟悉不同场景下的指针控制策略。