仅使用3个指针在Linked List的中间三分之一处找到元素?

JAN*_*JAN 1 algorithm pointers linked-list

考试提问:

  1. 给定一个未知大小的链表n,在哪里3划分n,我们如何才能打印链表的中间组元素(例如在1/3和2/3之间),只使用3指针,没有计数器?
  2. 我们怎么能只用两个指针做到这一点?

备注:我们不能左转,只有权利!

无法想出一个不涉及柜台的答案,有什么建议吗?

dat*_*olf 7

试着将指针想象成磁带上的拾取头.你可以在开始时全部启动它们,但是然后你以不同的速度移动它们(暗示,这些速度是相互之间1/3的分数的倍数).现在考虑一下速度越慢的指针到达终点时指针越慢的位置.

现在如何让指针像那样移动,即使你只能递增而不能进行乘法或除法.想想机械计数器如何承载其数字.

如何只用两个指针来做:想想你到达起始位置后可以做什么:将快速指针放在慢指针的位置并重复.