【发布时间】:2016-01-13 02:16:23
【问题描述】:
有点难以解释我的计划,但就是这样。我有一个对象的双向链接列表,这些对象按名为name 的成员属性按字母顺序排列。我希望删除一个具有特定名称的节点,但我想以这样一种方式删除它,以便它更有可能开始在靠近它的列表一侧寻找它。
所以我想我必须找到第一个节点的name 和最后一个节点的name 之间的“中点”。然后我将检查该中点是否小于节点的名称。少的话就从尾部开始,否则就从头部开始。
我遇到的问题是我无法将字符串直接转换为 int。我可能的解决方案是:
- 将头部和尾部中的每个单独字符转换为 int
- 把每一个转换成一个int数组,一个数组为头部,一个数组为尾部
- 再次将每个 int 转换为字符串并将它们放入新数组中
- 如果每个转换字符串的长度小于 3,则通过在其中插入 0 来使每个转换字符串的长度为 3
- 将每个数组中的字符串相加
- 再次将字符串转换为 int 并找到两个 int 之间的差异并将其除以 2
- 将新值添加到第一个节点的转换名称
- 查找此“中点”是否小于我要删除的节点的名称
- 如果是,从尾部开始搜索
- 否则,从头部搜索
有没有更简单的方法来做到这一点?
【问题讨论】:
-
您只能比较第一个不同的字符。
-
从哪一端开始并不重要。这不就是双链表的全部目的吗?
-
如果有更少的节点我必须通过尾部与头部进行迭代,反之亦然。
-
@Sythe 无论如何,您需要检查列表项才能知道这一点。不是吗?
-
如果搜索时间对您很重要,那么链表是错误的结构。而是查看树或哈希表。