查找单链表的中间节点,要求只能遍历一次链表

原创 2016年06月01日 10:40:59

思路:

由于只能遍历一次单链表,所以我就可以创建两个指针,第一个指针每次直走一步,第二个指针每次走两步。这样能在第二个指针指向尾的时候,第一个指针就指向了中间的节点了

创建节点模型:

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;
}


版权声明:本文为博主原创文章,转载需标明出处。

相关文章推荐

查找单链表的中间节点

有关单链表的两个问题【遍历一次求中间节点,倒数第K个结点】

package com.zhiru; /* * 一个无附加头结点的单向链表示例 */ public class LinkedList { private Node head; private...

编写程序,要求通过一次遍历找到单链表中倒数第 n 个节点

单链表的建立和遍历,比较适合才开始学数据结构的人

单链表中求中间节点

问题描述求单链表中间节点的值,如果中间有2个,只要第一个,就是偶数情况下,只要中间的第一个。速度要快! 解决方法可以参照这篇博文:http://blog.csdn.net/dawn_after_da...

带头结点的单链表( 冒泡排序 一次遍历求中间结点的值) 链表 就地反转 倒数第k个结点

Source Code: #include using namespace std; typedef struct student { int num; struct student *...

寻找单链表的中间节点

思路: (1)首先求解单链表的长度length,然后遍历 length / 2 的距离即可查到单链表的中间节点,但一般此种方法需要遍历两次链表,第一次遍历求解单链表的长度,第二次遍历根据索引获取中间...

007 算法:从单链表中删除一个中间节点

原文连接:http://www.pixelstech.net/article/1446199844-Algorithm-%3A-Delete-middle-node-from-singly-linke...

线性表---单链表(创建、找中间节点、删除头元素)

#include #include using namespace std;typedef struct node { int num; struct node *next; }Nod...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)