考虑以下代码来检测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()
等)