考虑以下代码来检测linkedlist是否有循环
public boolean hasLoop() {
Node<E> fast = first;
Node<E> slow = first;
while (fast != null && fast.next != null) {
fast = fast.next.next;
slow = slow.next;
if (slow == fast) {
return true;
}
}
return false;
}
如果Sun Microsystems要在其中添加功能(例如:detectLoop, reverseLinkedlist, findIf2linkedlist intersect等)Linkedlist.java,他们会怎么做?注意,Sun 使用 Node 类作为内部细节(即私有)。
我能想到的几个选项(列出每个选项的缺点)
Linkedlist.java 中的静态函数“hasLoop”?(这很奇怪,因为如果我想为现有的 hasLoop 做
instance,我会称之为LinkedList.mergeSort(instance)而不是instance.mergeSort())Linkedlist.java 中的非静态函数“hasLoop”?(这会很奇怪,因为某些功能
sort属于集合)子类化 Linkedlist.java 并添加新函数“hasLoop”?(这会很奇怪,因为如果我需要添加另一个函数,比如say
findIntersection,我需要创建另一个子类)不知何故使用 Collections 并添加一个静态方法“hasLoop(List)”,并在 LinkedList.java 中添加其他接口以使其成为可能?(这会很丑陋,因为 Node 是具有内部实现的私有类,并且
ptr.next不能由集合执行。它需要一些设置器来修改状态setNext()等)