是否有删除一半双向链表边缘的名称?
Posted
技术标签:
【中文标题】是否有删除一半双向链表边缘的名称?【英文标题】:Is there a name for removing half of a doubly linked list edge? 【发布时间】:2014-11-17 17:53:37 【问题描述】:注意:这并不特定于 Java/C/C++,但链表与它们一样普遍,我选择在这些语言以及双向链表下标记它。如果错了,我可以改!
假设你有一个标准的双向链表实现:
struct List
int Number;
struct List *blink;
struct List *flink;
;
并且您有以下列表:
1 <--> 2 <--> 3 <--> 4 <--> 5
现在,就我而言,我一直在使用 flink
作为各种终结符,并在单个方向上取消链接节点:
1 <--> 2 <--> 3 <--| 4 <--> 5
所以 3 的 flink
是 null
,但 4 的 blink
指向 3。
(有点不相关,我一直这样做是为了快速修改和恢复链表,并且有类似的东西:
1 <--> 2 <--| 3 <--> 4 <--> 5
<--> 6 <--| 7 <--> 8
<--> 9 <--> 10 <--> 11
建立1 2 6 9 10 11
的列表
我的问题实际上只是“这种类型的操作有明确定义的名称吗?”我一直称它为“剪羊毛”,但如果有真名,那就太好了。
【问题讨论】:
可能类似于this? @StackFlowed 或者cs.stackexchange.com @Heron 哦,谢谢,我去那里问问 :) @StackFlowed 这个问题完全是off-topic 在超级用户。在建议人们在那里提问之前,请检查网站上的主题! @Heron 请明确建议人们标记迁移。新用户没有意识到它的存在,我们最终在 SE 网络上收到了多个问题副本,这违反了网站政策并浪费了人们的时间。 【参考方案1】:双向链表是一种乱七八糟的东西。它基本上是以不正确的方式删除节点。
为什么我说它不合适是,考虑节点 2 和 6,2 的 flink
为空,而 6 的 blink
指向 2。
通过这个你告诉 2 是最后一个节点,而 2 在 6 的后面。这是矛盾的。
你在哪里需要这种方法?
【讨论】:
我正在尝试优化一些需要访问所有可能路径的图遍历代码。有相当数量的数据一旦生成对于它相关的节点来说将是恒定的,而不是每次我点击节点时都重新生成它,我想生成一次,然后根据需要重新链接我的链表,因为数据在任何节点上都对列表中位于其前面的数据敏感。这不是一个很好的解释,我真的找不到合适的词来解释它:/【参考方案2】:好吧,除非您还保存指向节点 3、4、5、7 和 8 的指针,否则这将被称为“内存泄漏”。
即分配的内存您不再有访问和释放的方式。
【讨论】:
对不起,我想我没有说清楚。绝对存储取消链接的指针;) 虽然 rafeek 的回答有点半开玩笑,但他确实有一点:这种数据结构似乎很可能会导致代码中出现细微的错误。因此,它可能没有名字,因为它不会被广泛使用。以上是关于是否有删除一半双向链表边缘的名称?的主要内容,如果未能解决你的问题,请参考以下文章