一、环形链表I
给定一个链表,判断链表中是否有环。
思路:快慢指针,即慢指针一次走一步,快指针一次走两步,两个指针从链表起始位置开始运行,如果链表带环则一定会在环中相遇,否则快指针率先走到链表末尾。
拓展:1.为什么一定会相遇,有没有可能会错过,永远追不上?请证明。
fast、slow均从起始位置开始走
2.slow一次走1步,fast一次走3步可以吗?请证明。
证明slow一次走1步,fast一次走3步:N%2==0 N%2==1
上图中写到N为奇数,C-1是奇数也为奇数(即C为偶数),就永远追不上。请证明N为奇数,C为偶数是否存在。
结论:一定能追上,N是偶数第一轮就追上了;N是奇数第一轮追不上,C-1是偶数第二轮就追上了
二、环形链表II
给定一个链表,返回链表开始入环的第一个节点。如果链表无环,则返回NULL。
思路: