开始刷leetcode的题也有接近两个月了吧,自从上个月自不量力地去了两家互联网公司面试被血虐了一番之后下定决心好好通过leetcode来增强自己的编程能力以来,基本每天都会在leetcode上做题,没有做题的那几天至少心思也是在这上面的。一开始还用python去A题,后来专门去听了牛客网的一个专门讲怎么通过BAT面试的讲座才知道面试的时候用python写算法提示会被鄙视的。。。于是痛下决心捡起了我那三脚猫功夫的c++做题。换语言的初始阶段都是一边补语法知识一边做题的,A题速度十分缓慢。终于到现在能够做得稍稍快一些了。
今天A过了第142题Linked List Cycle II,今天做的第三个题。于是乎就让我的leetcode账号上一些做题统计数字变得很有纪念意义:在leetcode上提交的次数到了100,A题命中率又拉回了60%。在此贴图纪念一下。
ACCEPTED CODE
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* ListNode *next;
* ListNode(int x) : val(x), next(NULL) {}
* };
*/
class Solution {
public:
ListNode *detectCycle(ListNode *head) {
if(head == nullptr)
return nullptr;
ListNode *slow = head, *fast = head;
while(true) {
if(fast->next && fast->next->next) {
fast = fast->next->next;
} else
return nullptr;
slow = slow->next;
if(fast == slow)
break;
}
int period = 0;
do {
slow = slow->next;
period++;
} while(fast != slow);
slow = fast = head;
while(period-->0)
fast = fast->next;
while(slow != fast) {
slow = slow->next;
fast = fast->next;
}
return slow;
}
};