这是第三版算法简介练习中的一个问题:(我知道这是一个微不足道的问题,但我无法理解这个问题。)
第 10 章,第 240 页:
10.2-4
正如所写,LIST-SEARCH 过程中的每个循环迭代都需要两个测试:一个 for
x != L.nil
和一个 forx.key != k
。展示如何消除x != L.nil
每次迭代中的测试。
LIST-SEARCH(L, k)
x = L.nil.next
while x != L.nil and x.key != k
x = x.next
return x
L
是带有标记的循环双向链表。(哨兵是开始时固定的静态元素,有助于简化边界条件。例如,假设我们为列表提供了L
一个对象,该对象L.nil
表示NIL
但具有列表中其他对象的所有属性。)
除非k
您搜索的内容始终存在,否则简单的删除x != L.nil
将导致无限迭代。
您可以将此表达式转换x != L.nil
为其他表达式(例如列表中的元素计数),但这不是解决方案,我猜。
我在解决这个问题时缺少什么?