0

我正在尝试通过节点结构(年龄)中的 int 值重新排序我的 DLL。当我直接访问 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;

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

4

1 回答 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;
于 2013-10-15T08:01:08.777 回答