我在实现哈夫曼算法,为此我使用了一个双链表。实现需要对列表进行排序,但仅仅交换数据是不够的——我需要交换整个节点。然而,这比我预想的要复杂一些。
我使用了这个选择排序的变体,但它会导致访问冲突错误。我假设这是因为我试图访问某个空指针,这两个条件本应阻止它。
任何帮助或建议都将不胜感激。
void sortiraj()
{
Node *curr = top, *nxt;
for (int i = 0; i < num - 1; ++i)
{
nxt = curr->next;
for (int j = i + 1; j < num; ++j)
{
if (curr->prob > nxt->prob)
{
//swap prev
if (curr != top)
{
Node *temp_prev = curr->prev;
curr->prev = nxt->prev;
nxt->prev = temp_prev;
}
//swap next
if (nxt != last)
{
Node *temp_next = curr->next;
curr->next = nxt->next;
nxt->next = temp_next;
}
}
nxt = nxt->next;
}
curr = curr->next;
}
}
如果当前节点是顶部节点,则仍然需要交换之前的指针。这是因为您需要指出,新顶部的“上一个指针”设置为NULL,而旧顶部的“上一个指针”设置为新顶部。
“下一个指针”也是如此。
交换上一个和下一个标志不需要条件。相反,您需要条件来指示顶部和最后一个节点已更改。
此外,在交换指针时,不能只交换前面的指针。这是因为,这将意味着其中一个将指向自己。正确的方法是这样做
nxt->prev = curr->prev;
curr->prev = nxt;
交换下一个指针时,同样的情况也适用。
我在Java中实现一个双链接列表时遇到了一个问题。特别是要交换2个以下节点(在我的例子中,一个节点包含一个政治候选人)。 假设下面的DLL: head- 作为输出,我没有从头到尾的正确DLL,但从头到尾都很好: 我已经写了几个版本的这个方法reverseTwoNode。我甚至尝试在节点内部交换数据,而不是交换节点,我也有同样的问题。你能帮我真是太好了,我花了这么多时间在这个简单的功能上,我看不出有
024. Swap Nodes in Pairs[E] 题目 Given a linked list, swap every two adjacent nodes and return its head. For example, Given 1->2->3->4, you should return the list as 2->1->4->3. Your algorithm should us
我遇到了一个问题,在这个问题中,您应该交换双链接列表中的一组节点。例如:对于列表
我正在尝试交换双链接列表中的两个节点。下面是具有交换功能的程序部分。 当我运行这个程序时,在第一个和第二个节点的情况下,它崩溃了。而在任何其他节点的情况下,它提供无限循环输出。(例如:-2- 我知道还有一些关于节点交换的问题,但是我没有找到任何与我的问题相似的问题。请帮帮我...!! 提前谢谢。
我试图交换链表中节点的位置,然后使用排序函数进行排序。这两个函数中的任何一个都有逻辑错误。当我运行这个程序时,它会无限循环。 更新代码