leetcode-Linked List Cycle

来源:互联网 发布:董小飒淘宝店网址 编辑:程序博客网 时间:2024/05/05 15:39

Given a linked list, determine if it has a cycle in it.

Follow up:
Can you solve it without using extra space?

/** * 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* node=head;        ListNode* tmp=NULL;        while(node->next!=NULL)        {            if(head==(node->next))return true;             tmp=node->next;            (node->next)=head;//每次把扫到的节点的next指针指向头指针。然后判断如果有节点指向头指针即存在环            node=tmp;                    }        return false;    }};



注: 一个不破换原始数据结构的方法是设两个前进速度不同的指针,例如p以一次两步(一次一步)的速度,q以一次一步(两次一步)的速度,如果没有环,指针肯定会到null,如果有环,快的指针先到达环不断绕圈,肯定存在某一时刻两个指针相遇

0 0
原创粉丝点击