赞
踩
思路:如果存在回路,当两个速度不同的指针在其中不断循环时,一定会出现追及问题
如何体现速度不同:一个指针一次只跳一个结点,另一个指针一次跳两个(或多个)结点。
如何体现追及:判断两个指针所指向的内容是否是同一块地址区间。
代码
/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode(int x) : val(x), next(NULL) {} * }; */ class Solution { public: bool hasCycle(ListNode *head) { if(head==NULL) return false; ListNode * fast_p = head; ListNode * slow_p = head; while(fast_p!= NULL && fast_p->next!=NULL){ slow_p = slow_p->next; fast_p = fast_p->next->next; if(fast_p == slow_p) return true; } return false; } };
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。