博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
LeetCode 141, 142. Linked List Cycle I+II
阅读量:6265 次
发布时间:2019-06-22

本文共 1032 字,大约阅读时间需要 3 分钟。

判断链表有没有环,用Floyd Cycle Detection算法,用两个快慢指针。

class Solution {public:    bool hasCycle(ListNode *head) {        if (!head) return false;        ListNode *slow, *fast;        slow=fast=head;        do{            if (fast==NULL || fast->next==NULL) return false;            slow = slow->next;            fast = fast->next->next;        }while(slow!=fast);        return true;    }};

 

142是141的进阶,需要额外判断环的起点。

详见 https://leetcode.com/problems/linked-list-cycle-ii/solution/ 中的推导,不过里面应该是 F=(n-1)(a+b)+b,因此从head和相遇点开始同时走,一定会在循环起点相遇。

class Solution {public:    ListNode *detectCycle(ListNode *head) {        if (!head) return NULL;        ListNode *slow, *fast;        slow = fast = head;        do{            if (!fast || !fast->next) return NULL;            slow = slow->next;            fast = fast->next->next;        }while(slow!=fast);                ListNode *p=head, *q=slow;        while(p!=q){            p = p->next;            q = q->next;        };        return p;        }};

 

转载于:https://www.cnblogs.com/hankunyan/p/9126249.html

你可能感兴趣的文章
IOS开发之SVN的使用
查看>>
百度.搜狐...2015产品经理面试题
查看>>
Rewriting History with Git Rebase
查看>>
(算法)跳格子
查看>>
骨头汤,猪肉汤
查看>>
Codeforces Round #318 [RussianCodeCup Thanks-Round] (Div. 1) A. Bear and Poker 分解
查看>>
生成文件下载
查看>>
腾讯bugly 的crash 上报和umeng的比较
查看>>
A CIRCULAR PROGRESSBAR STYLE USING AN ATTACHED VIEWMODEL
查看>>
一些学习资料
查看>>
VFL子视图居中
查看>>
姿势体系结构的详细解释 -- C
查看>>
数据结构Java实现07----队列:顺序队列&顺序循环队列、链式队列、顺序优先队列...
查看>>
剖析Jetty实现原理
查看>>
Linux内核源码分析--内核启动之(6)Image内核启动(do_basic_setup函数)(Linux-3.0 ARMv7)【转】...
查看>>
Git代理服务器设置和访问Github
查看>>
字符串同构问题 字符串操作:数组计数字符个数问题
查看>>
brew-cask之本地安装应用
查看>>
MapReduce原理及其主要实现平台分析
查看>>
浅谈RSA加密算法
查看>>