在一次采访中,我被要求检测链表中的循环节点并计算循环中的节点数。由于我不知道flyod算法,我试图找出自己的方法。
在这种情况下,两个节点的地址将指向同一个节点(循环节点)。
例如
1 - →2 - →4 - →5 - 大于7 - →3 - →4
这里2-> next和3-> next是相同的,它是4的地址。这意味着链表中有一个循环,4是循环节点。从4到4的遍历将给出循环中的节点数。
有没有办法继续这种方法????
答案 0 :(得分:1)
当然,您可以通过维护一组已访问过的地址来轻松找到一个循环。由于您对循环大小感兴趣,因此您可以将其改为地图:address->count
。计数是在访问相应地址处的节点时访问了多少节点。当您发现表中已有的节点时,可以通过从当前节点中减去表中的计数来获取循环大小。当然,你可以通过维持"访问"来获得同样的效果。在节点本身中进行位和计数。然后不需要单独的地图。