Проблема перестановки узлов с двойным списком

0

Я пытаюсь изменить порядок моей DLL на значение int внутри узла struct (age). Он работает, когда я напрямую обращаюсь к int, но я пытаюсь обменивать все узлы, чтобы мне не пришлось менять каждую переменную в структуре, когда список переупорядочивается.

void DLL::ReOrg(node* head, int DLL_Size)
{

node* temp = head;
int holder;


for(int j = 0; j < DLL_Size; j++)
{

        while(temp != NULL)
        {

                    if (temp->next != NULL && (temp->age < temp->next->age) )
                    {
                        holder = temp->age;

                        temp->age = temp->next->age;
                        temp->next->age = holder;
                    }
                    else
                            temp = temp->next;//increment node
            }
            temp = head;

}


}

Это работает, но когда я пытаюсь сделать что-то вроде:

node* holder;

...

holder = temp;
temp = temp->next;
temp->next = holder;

Моя программа будет компилировать и запускать пустой экран. Любые рекомендации будут оценены. Я предполагаю, что было бы проще просто поменять все мои переменные (их немного), но я хотел сделать мой код более чистым. Благодарю.

Теги:
linked-list
doubly-linked-list

1 ответ

0
Лучший ответ

Это потому, что вы на самом деле не перенацеливаете узлы, поэтому вы получаете бесконечный цикл. Вам нужно изменить next ссылку предыдущего узла, а также ссылку prev на следующем следующем узле.


Если ваш список дважды связан, и у вас есть предыдущий указатель и следующий указатель, вы можете сделать что-то вроде этого:

node* next = temp->next;

// Fix the links of the previous node, and the next-next node
if (temp->prev)
    temp->prev->next = next;

if (next->next)
    next->next->prev = temp;

// Relink the two nodes that should be swapped
temp->next = next->next;
next->next = temp;

next->prev = temp->prev;
temp->prev = next;
  • 0
    Я предполагаю, что моя первоначальная ссылка потеряла указатели. я пытаюсь добавить prev-> next & next-> next-> prev, как вы сказали, но все еще пусто. я ненавижу связанные списки
  • 0
    @GeorgeCostanza Добавлен пример повторного связывания кода
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню