查找单链表的中间节点,要求只能遍历一次链表
2016-06-01 10:40
423 查看
思路:
由于只能遍历一次单链表,所以我就可以创建两个指针,第一个指针每次直走一步,第二个指针每次走两步。这样能在第二个指针指向尾的时候,第一个指针就指向了中间的节点了
创建节点模型:
typedef int DataType;
typedef struct strNode
{
struct strNode* pNext;
DataType data;
}Node;
typedef struct strNode* PNode;
找中间节点
PNode FindMidNode(PNode pHead)
{
PNode slow = NULL;
PNode fast = NULL;
assert(NULL != pHead);
if (NULL == pHead->pNext)
{
return NULL;
}
slow = pHead;
fast = pHead;
while (fast ->pNext!= NULL)
{
fast = fast->pNext->pNext;
slow = slow->pNext;
}
return slow;
}
由于只能遍历一次单链表,所以我就可以创建两个指针,第一个指针每次直走一步,第二个指针每次走两步。这样能在第二个指针指向尾的时候,第一个指针就指向了中间的节点了
创建节点模型:
typedef int DataType;
typedef struct strNode
{
struct strNode* pNext;
DataType data;
}Node;
typedef struct strNode* PNode;
找中间节点
PNode FindMidNode(PNode pHead)
{
PNode slow = NULL;
PNode fast = NULL;
assert(NULL != pHead);
if (NULL == pHead->pNext)
{
return NULL;
}
slow = pHead;
fast = pHead;
while (fast ->pNext!= NULL)
{
fast = fast->pNext->pNext;
slow = slow->pNext;
}
return slow;
}
相关文章推荐
- JavaScript js闭包所用的场合以及优缺点
- python安装完毕后,提示找不到ssl模块的解决步骤
- linux----进度条程序
- C#子线程执行完后通知主线程
- windows磁盘分区简介
- synchronized
- 理解ThreadLocal
- 百度地图定位 当前位置和地图显示
- 二级列表和文章里的关键字变红还有数据库的模糊查询
- MongoDB快速入门笔记(三)之MongoDB插入文档操作
- Nginx之proxy_store模块
- 基于ffmpeg的内存数据UDP直播推流
- Beam Search 基础知识-广度优先及深度优先搜索
- LL(1)文法 JAVA
- ios开发网络篇—HTTP协议
- How to use data analysis for machine learning (example, part 1)
- 分析java程序中占用CPU过高的线程
- Nginx配置文件详细说明
- 低边驱动与高边驱动
- Docker 入门教程(二)