单链表的中间节点
Middle node of Singly linked List
我在C++中找到了打印列表中间节点的代码,但我不理解代码。。。有人能解释一下吗?
Type& findMiddleNode()
{
int check = 0;
nodeType *current;
nodeType *mid;
current = first;
mid = first;
while (current != NULL)
{
current = current->link;
check = (check + 1) % 2;
if (check == 0)
mid = mid->link;
}
return mid->info;
}
PD:这个代码很好用,但我不明白!有人帮我理解这一点。谢谢
基本思想是在列表中移动两个指针B和A,但B的移动速度只有A的一半。
声明
check = (check + 1) % 2;
…给check
值0、1、0、1等等,用于仅在A移动一秒时移动B。
对于检查单链表是否包含循环的问题,同样的想法也是一个可能的(也是预期的)答案。在这种情况下,快速移动的指针将在两者都进入循环后赶上慢速移动的指针。
一种更简单的方法是,在程序花费几乎相同的工作量的情况下,(1)计算节点数n,(2)从开始处重新开始,转到节点号n/2。
步骤(1)移动指针n次,如上面的a,步骤(2)移动指针n/2次,如前面的B。
相关文章:
- 反向给定链表中的K节点
- 2D数组来自文本输入,中间有空格
- 如果我只是不访问queue_front节点的子节点,而是将它们推到队列中呢?还是BFS吗
- Boost Graph Library,修复节点大小
- C++A*算法并不总是在路径中具有目标节点
- 我可以擦除 std::queue 中间的节点吗?
- 尝试删除链表的头部或中间节点时出错
- 如何在列表中间释放删除的节点,而没有阀门错误
- C++ 在链表中间插入新节点时出现问题
- 在单个链接列表中间删除一个节点,仅给定对该节点的访问
- 在只给定单个链接列表中间的节点的情况下删除该节点.C++
- 从单链列表的中间删除节点
- C++正在从列表中间删除节点
- 在双向链表的中间插入一个节点
- 单链表在中间添加节点
- 查找链表的中间节点
- C++:删除单向链表中间的节点
- 如何在单遍历中找到单个链表的中间节点(如果链表的长度未给定)
- 单链表的中间节点
- 添加带有链表的中间节点