LeetCode-LinkedList-141. Linked List Cycle

来源:互联网 发布:mccall软件质量模型 编辑:程序博客网 时间:2024/06/06 00:21

问题:https://leetcode.com/problems/linked-list-cycle/
Given a linked list, determine if it has a cycle in it.
分析:如果无环,遍历链表将会走到NULL的位置。如果有环,用两个指针,fast和slow。fast一次走两步,slow一次走一步。fast先出发,slow后出发。再把slow看成在前面,那fast就是在追赶它,每次追一步,如果有环必定会相遇。
代码:

/** * 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 *show=head;        ListNode *fast=head;        while(true)        {            if(show->next!=NULL)                show=show->next;            else                return false;            if(fast->next!=NULL && fast->next->next!=NULL)                    fast=fast->next->next;            else                return false;                if(show==fast)                 return true;        }        return false;    }};
0 0
原创粉丝点击