为了账号安全,请及时绑定邮箱和手机立即绑定

查找链表的中间元素

查找链表的中间元素

C#
慕尼黑5688855 2021-11-21 16:39:14
我们有一个包含“n”个元素的链表。我怎样才能找到中间元素?我可以这样做吗?(这是一个伪代码)Node current = head;for (int i = 0; i < n/2; i++){    current = current.next;}return current;
查看完整描述

3 回答

?
慕村9548890

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再次返回// 您可以根据需要修改它。


查看完整回答
反对 回复 2021-11-21
?
Helenr

TA贡献1780条经验 获得超3个赞

这是一个简化的算法:


var enumerator1 = linked.GetEnumerator();

var enumerator2 = linked.GetEnumerator();

int count = 0;

while (enumerator1.MoveNext())

{

    count++;

    if (count % 2 == 0)

        enumerator2.MoveNext();

}

主指针每移动两次,第二指针就会移动一次。


查看完整回答
反对 回复 2021-11-21
?
翻翻过去那场雪

TA贡献2065条经验 获得超13个赞

简单:

var current = list.ElementAt(list.Count()/2);


查看完整回答
反对 回复 2021-11-21
  • 3 回答
  • 0 关注
  • 177 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信