python 双指针

本文介绍了Python中双指针技术的三种应用:快慢指针用于移动列表元素和判断链表环;对撞指针解决列表元素和索引对和问题;分离指针处理多个列表间的交互问题。通过实例展示了如何使用这些技巧解决问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、快慢指针

  • 两个指针,分别以不同的步长移动

1.可以用来移动列表内的元素

例如,给定一个列表

nums = [1,0,2,0,3]

将0移动到列表的末尾
快指针 f
慢指针 s
初始值都为0

  • 此时快指针所对应的元素不为0,快慢指针向后移动
f s
1 0 2 0 3
  • 此时快指针对应元素为0,快指针向后移动
f s
1 0 2 0 3
  • 将快指针和慢指针对应的元素调换
s f
1 0 2 0 3
  • 此时快指针对应元素为0,快指针向后移动
s f
1 2 0 0 3
  • 此时快指针对应元素不是0,快慢指针元素调换
s f
1 2 0 0 3
  • 调换后结果如下,如果继续移动快指针,则超出范围,结束循环
s f
1 2 3 0 0
  • 源代码如下:
nums = [1,0,2,0,3]
s = 0
f = 0
while f < len(nums):
    if nums[f] == 0:
        f += 1
    else:
        nums[f],nums[s] = nums[s],nums[f]
        s += 1
        f += 1
  • 输出nums的结果为

[1, 2, 3, 0, 0]

2.可以用来判断链表是否有环

  如果链表有环,当慢指针也进入环的时候,快慢指针总会相遇。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值