目标:在一个给定的链表中用o(n)级的算法,找到倒数第M个结点。
方法:利用俩个指针,指针距离M,然后从指针头同步后移,直到有一个指针指向链表尾为止。
注意:判断指针是否移动到链表尾结点的标志是elem->next==null,倒数第M个节点的定义,这直接关系到,同时后移的两个节点之间的间距。
代码:
element *FindMToLashElement(element *head, int m)
{
element *curPos=head;
element *mCurPos;
if(!head)
return 0;
for(int i=0;i<m;i++)
if(curPos->next)
curPos=curPos->next;
else
return 0;
mCurPos=curPos;
curPos=head;
while(mCurPos->next)
{
mCurPos=mCurPos->next;
curPos=curPos->next;
}
return curPos;
}