Этот ответ предполагает, что список ВСЕГДА должен оставаться односвязным:
Вам нужен только указатель на первый элемент и указатель на текущий элемент.
Когда вы выполняете итерацию вперед, увеличивайте некоторый счетчик, чтобы узнать, сколько раз вы выполняли итерацию. (Вставки МОГУТ сделать итераторы недействительными!). Назовем эту переменную count
Теперь, если вы хотите повторить k
значений текущего элемента в обратном направлении, вы знаете, что вам нужно выполнить итерацию ВПЕРЕД от первого элемента count - k
раза.
РЕДАКТИРОВАТЬ: Конечно, мы можем повысить эффективность; этот ответ является своего рода подходом грубой силы.
Как упоминалось в одном из комментариев, вы можете помещать указатели в стек при итерации вперед, а затем извлекать их при итерации назад.
Если список не всегда должен оставаться односвязным, то вы можете добавлять обратные ссылки по мере повторения вперед, а затем удалять эти ссылки при повторении назад (хотя кто знает, зачем вам это нужно).
person
AndyG
schedule
03.10.2013