思路:
还是那句话,链表问题,第几个这种关键字,双指针永远不会背叛你!
当然,关于这道题,背叛你的应该是你的脑子。所以,去买一个外置大脑,有助于你思考笑
我觉得这道题与其说考的是代码,不如说考的是数学(哭)。
这里我就不证明了,吹会儿牛。
我喜欢跑步,每次在操场跑步的时候,总有人跑得快,有人跑得慢。
操场就像环一样,跑得快的人就像快指针,跑得慢的人就像慢指针,那个他与她,在缘分到来时,终会相遇!
所以,快慢指针终会在环内迎来他们针生的第一次相遇!
然而相遇是短暂的,人生总是伴随着数不清的离别,指针也一样!匆匆的相遇后,就会迅速地分开。
但是,有缘,自会再见。指针也一样。在漫长的离别之后,他们又会迎来刹那的重逢。
第二次重逢是令针喜悦的。因为,他与她,默契地,又回到了最初的起点,呆呆地站在镜子前~~
咳咳。证明完毕!
希望,你们也能像快慢指针一样,在某一天,回到开始的地方,再次,见到那个,他与她。
毕竟,默契的重逢总是令人喜悦,纯真的美好最能触人心弦。
那个他与她,总会让我们在夜深人静时悄悄地怀念!
代码如下:
class Solution { public: ListNode *detectCycle(ListNode *head) { ListNode* f=head; ListNode* s=head; if(!f) return NULL; while(1){ if(!f->next||!f->next->next) return NULL; f=f->next->next; s=s->next; if(f==s) break; } f=head; while(f!=s){ f=f->next; s=s->next; } return s; } };
上述证明纯属吹牛,就图一乐,大家见谅!