我正在研究Floyd的Tortoise and Hare algorithm,并尝试使用std :: forward_list对问题进行建模。具体来说,我想故意使用powerbi-visuals-tools
创建一个循环,并用所述算法检测它。
(根据下面的评论,不破解界面;也就是说,使用std::forward_list
界面来创建循环。)
“问题”是这似乎不可能。我已经看过构造函数和mutator方法了。据我所知,std::forward_list
的接口阻止了这种周期的发生。这通常是一件好事,除非你准备面试,并且想要故意实现一个带循环的forward_list:^)
是否可以在std :: forward_list中创建一个循环?
参考文献:
How to detect a loop in a linked list?
http://en.cppreference.com/w/cpp/container/forward_list
http://codingfreak.blogspot.com/2012/09/detecting-loop-in-singly-linked-list_22.html
答案 0 :(得分:3)
forward_list
(和list
的接口,专门用于隐藏用户的节点和节点指针的详细信息。它们不受设计和抽象的影响。
所以不,他们没有给你自由创建一个格式错误的列表。即使使用splice
也不允许这样做,因为它会在将旧项目放入新列表之前将其从旧列表中删除。
如果你想测试一个循环检测算法,你必须编写自己的链表类型,允许人们在其中制作循环。