双链接列表节点交换问题

时间:2013-10-15 07:56:22

标签: c++ linked-list doubly-linked-list

我正在尝试通过节点struct(age)中的int值重新排序我的DLL。当我直接访问int时,它可以正常工作,但我正在尝试交换整个节点,以便在重新排序列表时我不必交换struct中的每个变量。

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;

我的程序将编译并运行一个空白屏幕。任何指导将不胜感激。我猜测交换所有变量会更容易(没有很多),但我想让我的代码更清晰。感谢。

1 个答案:

答案 0 :(得分: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;
相关问题