3 回答
TA贡献1884条经验 获得超4个赞
是的,你的代码是正确的。下面是使用 Tortoise and Hare 算法的另一种方法。
if(head == null) return head;
if(head.next == null || head.next.next == null) return head;
Node slow = head,fast = head.next.next;
while(fast != null && fast.next != null){
slow = slow.next;
fast = fast.next.next;
}
if(fast != null) slow = slow.next;
Console.writeLine(slow.data);
如果列表是[1,2,3,4,5,6,7]=> 这将返回4。
如果 list 是[1,2,3,4,5,6]=> 这将返回3.// 如果你愿意你可以4通过轻微的修改返回。
如果 list[1]或[1,2]=> 它1再次返回// 您可以根据需要修改它。
TA贡献1780条经验 获得超3个赞
这是一个简化的算法:
var enumerator1 = linked.GetEnumerator();
var enumerator2 = linked.GetEnumerator();
int count = 0;
while (enumerator1.MoveNext())
{
count++;
if (count % 2 == 0)
enumerator2.MoveNext();
}
主指针每移动两次,第二指针就会移动一次。
- 3 回答
- 0 关注
- 177 浏览
添加回答
举报