algorithm www.internalpointers.com