如何在搜索链表的while循环的每次迭代中消除NULL检查?
答案 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
。