Leetcode141| 环形链表

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/jmu201521121021/article/details/84574943

Leetcode141| 环形链表

  • 题目描述
    给定一个链表,判断链表中是否有环
  • 解题思路
    利用快慢指针, p1= head, p2= head->next, p1为慢指针,p2为快指针, p1每次走一步, p2每次走2步,速率差为1, 经过次数为 两者距离除以/ 两者差速,几乎等于环形的长度K。时间复杂度为O(n)。
    • 代码
 * struct ListNode {
 *     int val;
 *     ListNode *next;
 *     ListNode(int x) : val(x), next(NULL) {}
 * };
 */
class Solution {
public:
    bool hasCycle(ListNode *head) {
       ListNode* p1, *p2;
       if(!head){
           return false;
       }
       if(!head->next){
           return false;
       }
       p1 = head;
       p2 = head->next;
       while(p1 != p2){
           if(p2 == NULL || p2->next ==NULL){
               return false;
           } 
           p1 = p1->next;
           p2 = p2->next->next;
       }
       return true;
    }
};

猜你喜欢

转载自blog.csdn.net/jmu201521121021/article/details/84574943