Если вы оставите p2
точно k
элементов позади p1
, то это не очень поможет, так как вам придется делать одинаковое количество обходов все вместе.
Вы можете оптимизировать процедуру, используя больше указателей.
Когда вы идете по списку, допустим, вы помните указатель на каждой (к / м)-й позиции, для некоторых m . Вам нужно только запомнить последние m + 1 из этих указателей. Затем, когда вы доберетесь до конца списка, вместо повторения с самого начала, начните с самого старого указателя, который вы запомнили. Он будет между k и k + (k / m) элементами за концом, поэтому вам нужно только продвинуть его вперед максимум на k / m позиций.