猿问

查找链表的中间元素

我们有一个包含“n”个元素的链表。我怎样才能找到中间元素?


我可以这样做吗?(这是一个伪代码)


Node current = head;

for (int i = 0; i < n/2; i++)

{

    current = current.next;

}

return current;


慕尼黑5688855
浏览 178回答 3
3回答

慕村9548890

是的,你的代码是正确的。下面是使用 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){&nbsp; &nbsp; slow = slow.next;&nbsp; &nbsp; 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再次返回// 您可以根据需要修改它。

Helenr

这是一个简化的算法:var enumerator1 = linked.GetEnumerator();var enumerator2 = linked.GetEnumerator();int count = 0;while (enumerator1.MoveNext()){&nbsp; &nbsp; count++;&nbsp; &nbsp; if (count % 2 == 0)&nbsp; &nbsp; &nbsp; &nbsp; enumerator2.MoveNext();}主指针每移动两次,第二指针就会移动一次。

翻翻过去那场雪

简单:var&nbsp;current&nbsp;=&nbsp;list.ElementAt(list.Count()/2);
随时随地看视频慕课网APP
我要回答