这里我们可以创建两个指针均指向链表的头位置,让两个指针一起向前走,一个一次走一步,一个一次走两步。当走两步的指针到达链表末尾时,另一个指针则到达链表的中间位置
代码如下
SListNode* FindMiddle(SList* plist){
SListNode* pSlow = plist->_head;
SListNode* pFast = plist->_head;
while (pFast){
if (pFast->_next != NULL){
pFast = pFast->_next->_next;
}
else {
break;
}
pSlow = pSlow->_next;
}
return pSlow;
}
记得将函数声明放在我们的头文件中。