博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
查找单链表的中间结点(要求只能遍历一次链表)
阅读量:2242 次
发布时间:2019-05-09

本文共 479 字,大约阅读时间需要 1 分钟。

如果没有要求,我们就可以先将链表遍历一遍,记录一共有多少个元素,然后再遍历一遍,就能找到中间元素。

但题目要求只能遍历一次链表,我们就要换一种思路,用一个快指针一步可以走两个结点,慢指针一步走一个结点,两者同时开始从头结点走,当快指针走到最后一个结点或者倒数第二个结点的时候,慢指针就刚好走到了中间结点
这里写图片描述

void FindMiddle(Node *first)    {        assert(first);        Node *fast = first;        Node *slow = first;        while (fast->next != NULL && fast->next->next != NULL)        {            fast = fast->next->next;            slow = slow->next;        }        printf("%d", slow->data);    }

这个算法的判断条件比较重要,要学会用简单的例子来找到循环判断的条件

你可能感兴趣的文章
Struts2工作原理和执行流程图
查看>>
在线预览Word,Excel~
查看>>
hibernate延迟加载(get和load的区别)
查看>>
关于文件拷贝效率问题
查看>>
MyBatis分页插件PageHelper的使用
查看>>
【MyBatis学习01】宏观上把握MyBatis框架
查看>>
【MyBatis学习02】走进MyBatis的世界
查看>>
【MyBatis学习03】原始dao开发方法及其弊端
查看>>
【MyBatis学习04】mapper代理方法开发dao
查看>>
【MyBatis学习05】SqlMapConfig.xml文件中的配置总结
查看>>
【MyBatis学习06】输入映射和输出映射
查看>>
【MyBatis学习07】动态sql
查看>>
【MyBatis学习08】高级映射之一对一查询
查看>>
【MyBatis学习09】高级映射之一对多查询
查看>>
【MyBatis学习10】高级映射之多对多查询
查看>>
【MyBatis学习11】MyBatis中的延迟加载
查看>>
【MyBatis学习12】MyBatis中的一级缓存
查看>>
【MyBatis学习13】MyBatis中的二级缓存
查看>>
【MyBatis学习14】MyBatis和Spring整合
查看>>
【MyBatis学习15】MyBatis的逆向工程生成代码
查看>>