习题3.5 求链表的倒数第m个元素 (20point(s))
请设计时间和空间上都尽可能高效的算法,在不改变链表的前提下,求链式存储的线性表的倒数第m(>0)个元素。
Example:
ElementType Find( List L, int m )
{
PtrToNode node = L->Next;
PtrToNode guard = L->Next;
while(guard && m) {
guard = guard->Next;
--m;
}
if(m) return ERROR;
while(guard) {
node = node->Next;
guard = guard->Next;
}
if(node) return node->Data;
else return ERROR;
}
思路:
让 guard 先行 m 步,然后 node 开始跟着 guard 前进,最后停下来的地方就是 find 的结果。