思路:
由于只能遍历一次单链表,所以我就可以创建两个指针,第一个指针每次直走一步,第二个指针每次走两步。这样能在第二个指针指向尾的时候,第一个指针就指向了中间的节点了
创建节点模型:
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;
}