题解 | #判断链表中是否有环#

判断链表中是否有环

http://www.nowcoder.com/practice/650474f313294468a4ded3ce0f7898b9

经典题型,使用双指针法。一个快指针,一个慢指针,两指针最初都指向头结点,快指针一次走两步,慢指针一次走一步。若存在环,则两个指针最后一定会走到一个结点上。
/**
 * 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) {
        ListNode* fast = head;
        ListNode* slow = head;
        if(head == NULL){
            return false;
        }
        if(head->next == NULL){
            return false;
        }
        fast = fast->next->next;
        slow = slow->next;
        while(fast != NULL && slow != NULL){
            if(fast == slow){
                return true;
            }
            slow = slow->next;
            if(fast->next != NULL){
                fast = fast->next->next;
            }else{
                return false;
            }
            
        }
        return false;
    }
};
这里需要注意两个需要特殊处理的情况。一是空链表,直接返回false。二是单结点无环,直接返回false。
还有一点需要注意的是,在编程时容易将第一次移动结点写在循环中,这样容易出错,建议将第一次移动结点在循环外完成。
全部评论

相关推荐

FOX2003:还没学后端框架吧,看你第一个项目用的mockjs。第一个项目太老而且可能是从github上扒的(我的课设就是这个),第二个主要依靠AI的能力,而且前端项目找前端实习的话,留个github地址好点,主要还是前端要求越来越高了。另外,去***看看,符合就投,boss投的多,HR工作量就大,没功夫多聊
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务