如何查找单向链表中的中间结点

sallan 2010-04-24 11:30:33
大家好,我的算法能力不好,如果大家有时间的话
能否帮我解答一下我提出的问题“如何查找单向链表中的中间结点”
这是我的面试题,面试官说没有尾节点我就不知道如何做了
能力真差,希望大家帮助,谢谢。
...全文
469 8 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
bbo123 2010-04-24
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 heis07w 的回复:]

拿两个指针同时遍历,第一个每次走两步,另一个一次走一步,第一个到头时第二个即在中间
[/Quote]

真是高手,佩服
heis07w 2010-04-24
  • 打赏
  • 举报
回复
拿两个指针同时遍历,第一个每次走两步,另一个一次走一步,第一个到头时第二个即在中间
sixbusy 2010-04-24
  • 打赏
  • 举报
回复
没有尾节点 那就是循环链表啦??
那记录都节点的指针,循环遍历一遍获得结点个数N,
在从头开始遍历N/2次就可以了!
没有什么效率可言,就是可能的一种方法吧!
lirg8405 2010-04-24
  • 打赏
  • 举报
回复
List *FindMid(const List *Head)
{
int i=0;
List *Tmp,*result;
if (Head->Next == NULL) return NULL;
Tmp = Head->Next;
result = NULL;
while(Tmp != Head)
{
tmp = tmp->Next;
i++;
if (i == 1 || i == 2) result = Head->Next;
else if ( i%2 == 1) result = result->Next;
}
return result;
}
吴明治 2010-04-24
  • 打赏
  • 举报
回复
假如5个节点 一次跳两个 最后跳到哪去了?0 2 4 。。。?跳过head又开始了.. 第二个到不了头 一直循环了
sallan 2010-04-24
  • 打赏
  • 举报
回复
感谢大家的帮助
请问coolsky600
您能把您的想法说的详细些吗?
谢谢您的帮助。
吴明治 2010-04-24
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 inflexible_lin 的回复:]
引用 2 楼 heis07w 的回复:
拿两个指针同时遍历,第一个每次走两步,另一个一次走一步,第一个到头时第二个即在中间

这个算法感觉新鲜
[/Quote]

如果是奇数个节点就跳两下就跳过head了 有点复杂 除2简单
aleyn 2010-04-24
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 heis07w 的回复:]
拿两个指针同时遍历,第一个每次走两步,另一个一次走一步,第一个到头时第二个即在中间
[/Quote]
这个算法感觉新鲜

65,187

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧