如何查找链表循环中的节点数?
例如
A ----> B ----> C -----> D -----> E
Λ |
| |
| V
H <----- G <----- F
查找从c到h的循环中的节点数
基本的问题是如何找到C点,我们可以使用传统的兔子和乌龟算法,但它并不是每次都在C点相遇。
最佳答案
我不认为这是一个链接列表。LinkedList通常以空指针或指向结束符号的指针结束。即:start -> A -> B -> C -> end
。我认为这是一种特殊的图形。
要查找图中的节点总数,我将执行以下操作:
List visited;
List toVisit;
toVisit.add(A); // add the first Node
while(toVisit is not empty){
Node current = visited.remove();
Array <Node> links = current.getLinks();
for(int i=0; i<links.size(); i++){
if(!visited.contains(links[i])){ // if the link has NOT already been visited add it to the toVisit List
toVisit.add(links[i]);
}
visited.add(current); // mark current as visited
}
}
return visited.size(); // to get the number of nodes in the graph
如果你总是知道会有一个类似的循环(注意
...
):A ---> ... ---> C -----> D -----> E
Λ |
| |
| V
... <----- G <--- F
您可以这样修改代码:
List visited;
Node current = firstNode;
while(!visited.contains(firstNode)){
Node next = current.getNext();
visited.add(current); // mark current as visited
current=next;
}
// our ending condition is when we have found the same node again.
int currentIndex = visited.indexOf(current);
int size = visited.size();
int sizeOfLoop = size - currentIndex;
return sizeOfLoop;