常见的单链表题目
1、判断一个单链表中是否有环 思路:给定两个指针fast和low都指向头结点,然后low每次前进一步,fast每次前进两步,如果此单链表中有环,那么fast和low一定会相遇,否则fast一定会先遇到null。实现代码如下: bool isCircle(LinkList *head){ LinkList *fast = head;//快指针 LinkList *low = head;//慢指针 while(low->next != NULL && fast->next->next != NULL) { low = low->next; fast = fast->next->next; if (low == fast) { return true; } } return false;} 现在还有个问题需要思考, 为什么如果链表有环,fast和low就一定会相遇呢? 假设单链表长度为n,且该单链表是环状的。 ① 若low和fast的起点相同,那么第i次迭代时,low指向元素(i mod n),q指向(2i mod n)。因此当i≡2i(mod n)时,fast和low相遇。而i≡2i(mod n) → (2i-i)mod n=0 → (i mod n) = 0 →当i=n时,fast和low相遇。 ② 若low和fast的起点不同,假设第i次迭代时low指向元素(i mod n)