目标:在一个给定的链表中用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;
}
本文介绍了一种在O(n)时间内寻找链表倒数第M个元素的方法,通过使用双指针技巧实现。首先,将第一个指针向前移动M个位置,之后两个指针同步移动直至首个指针到达链表尾部。此时,第二个指针所指向的即为所求元素。
5993

被折叠的 条评论
为什么被折叠?



