在搜索链接列表中消除NULL检查

时间:2011-05-11 20:11:40

标签: algorithm data-structures while-loop linked-list

如何在搜索链表的while循环的每次迭代中消除NULL检查?

4 个答案:

答案 0 :(得分:4)

您可以使用sentinel元素 - 追加您搜索的元素。如果你发现没有找到哨兵归来;在这两种情况下删除哨兵。

添加了:

Sentinel search example;我为这门语言道歉。我记得N. Wirth's "Algorithmen und Datenstrukturen"的战略;我为语言道歉。

答案 1 :(得分:1)

你根本做不到。

只要您迭代任何数据结构,您总是希望算法在结构到达结尾时采取不同的行为,因此需要进行任何类型的检查。无论您的数据结构是什么,并且不依赖于您正在迭代的“方式”,这都是正确的:for(int i = 0; i< sizeArray ; ++ i),for(iterator it = myList.begin(); it!= mylist.end(); it ++),while( currentNode.hasChildren()),while( javaIterator.hasNext( ))......

然而,无论您的循环如何,检查可访问对象是否为NULL都不会成为算法的瓶颈。甚至很难耗费更少的时间......

你可以避免检查的唯一方法是避免循环本身,因此编写循环中的每个步骤,但它需要你在编译时知道链表的大小,在这种情况下你的编译器可能已经比你自己做的更好地优化了代码; - )

答案 2 :(得分:0)

您可以使用循环(循环)链接列表,其中最后一个元素与第一个元素链接。

答案 3 :(得分:0)

您可以跟踪列表中的元素数量。如果您始终知道列表中有多少元素以及当前位置,那么当您想要前进到下一个元素时,无需检查NULL