c - 交换双链表中的节点 - 慢速排序算法丢弃节点

标签 c struct linked-list

为了练习,我一直在研究一个压缩器,它可以执行查找重复部分、生成字典、使用霍夫曼代码进行压缩的工作。

这不是真的有效。

其中一个问题是,出于某种原因,我的排序算法从字典中删除了关键字。我认为问题出在交换例程中,但我不确定。 (此例程交换相邻关键字,next 为 current->next)。

我确实有一个静态关键字 * head;

void swap(keyword * current, keyword * next) {
  keyword * prev = current->prev;
  if (prev){
    prev->next = next;
    next->prev = prev;
  } else { /* no prev - current is head */
    head = next;
    next->prev = 0;
  }
  current->prev = next;
  current->next = next->next;
  next->next = current;
}

有什么问题吗?

最佳答案

你没有设置next->next->prev

众所周知,正确实现数据结构非常困难。发现这类事情的方法是计算出有多少指针需要更新 (6)。您只更新了 5 个,所以肯定少了一个!

关于c - 交换双链表中的节点 - 慢速排序算法丢弃节点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3959834/

相关文章:

c - 不使用反汇编程序扫描 'call' 指令?

c - c 中结构位值的问题

networking - 在 Go 中将结构转换为字节 slice 的紧凑方法是什么?

c - 插入到链表中

c - 学生管理系统使用链表删除部分出错

c - 打印链表的地址

java - 列表和链表

c - 如何从 .o 文件中删除 undefined symbol

使用像 printf 中的变量在 C 中创建一个 char 数组

c - C 中的指针数组