Как перевернуть каждый элемент k в связанном списке?

Возможный дубликат:
Инвертировать каждые k узлов связанного списка

Скажите, что связанный список <1,3,6,4,8,9,0,2>. Вызов reversek (3) приведет к <6,3,1,9,8,4,2,0>. Я написал обратную функцию, которая может быть использована в качестве вспомогательной функции в reversek. Вот моя обратная функция, которая переворачивает от заданной начальной точки к данной конечной точке:

    void List::reverse(Node * & start, Node * & end)
{
Node *pter = start;
while (pter != NULL)
{
Node *tmp = pter->next;
pter->next = pter->prev;
pter->prev = tmp;
if (tmp == NULL)
{
endPoint = startPoint;
startPoint = pter;
}
pter = tmp;
}

Я запутался в том, как реализовать реверс, любая помощь приветствуется.

1

Решение

Попробуйте что-то вроде —

  1. Имейте 2 указателя (P1, P2) на связанный элемент заголовка списка.
  2. Один используется для обхода списка (P1). В то время как другой (P2) используется для замены элементов, как только точка пересечения достигнут 3-го узла в списке.
  3. Теперь переместите оба указателя на 4-й узел. И снова продолжите прохождение P1 до конца списка.

Здесь вы должны отслеживать, когда каждый третий узел достиг P1. Вот, например, 3, но это зависит от аргумента функции.

0

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector