经典指数          
原因
1745
浏览数
0
收藏数
 

寻找一个单向链表的中项,如果存在两个则返回前一个。请给出算法描述并给出代码实现。

     举报   纠错  
 
切换
1 个答案

思路:单链表返回中点.  快慢指针,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;//返回中点

}

 
切换
撰写答案