寻找一个单向链表的中项,如果存在两个则返回前一个。请给出算法描述并给出代码实现。
思路:单链表返回中点. 快慢指针,pSLow一次运行1步,pFast一次跑两步,pFast指向结尾时候,此时pSlow正好是中点
typedef int ElemType;
struct sNode
{
ElemType data;
sNode *next;
};
sNode* FindListMiddleNode(sNode* HL)//带表头附加结点
{
if(!HL || !HL->next)//如果HL为空或者它根本没有数据结点,返回NULL
return NULL;
sNode *pSlow, *pFast;
pSlow = HL->next;
pFast = HL->next->next;
while(pFast && pFast->next)
{
pSlow = pSlow->next;
pFast = pFast->next->next;//一次两步
}
return pSlow;//返回中点
}