[Leetcode] Linked List Cycle II里程碑

开始刷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;
    }
};


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值