leetCode:Linked List Cycle II

来源:互联网 发布:linux运维面试简历项目 编辑:程序博客网 时间:2024/06/05 22:29

Given a linked list, return the node where the cycle begins. If there is no cycle, returnnull.

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

设定两个指针,一个指针在前面,一个指针在后面。如果后面的指针一直小于前面的指针,那么就没有循环;

如果后面的指针超过前面的指针,那么就存在循环

#include<iostream>using namespace std;struct ListNode{    int val;    ListNode * next;    ListNode(int x):val(x),next(NULL){ };};class Solution{public:    Solution(){ };//constructor;        ListNode * detectCycle(ListNode *head){        ListNode * pre;        ListNode * post;        if(head==NULL || head->next==NULL)            return NULL;        pre=head;post=head->next;        while(pre<post){            post=post->next;            pre=pre->next;            if(post==NULL)                return NULL;        }return post;       }};int main(){    ListNode a=ListNode(-1);    ListNode b=ListNode(-7);    ListNode c=ListNode(7);    ListNode d=ListNode(-4);    ListNode e=ListNode(19);    ListNode f=ListNode(6);    ListNode g=ListNode(-9);    ListNode h=ListNode(-5);    ListNode i=ListNode(-2);    a.next=&b;b.next=&c;c.next=&d;d.next=&e;    e.next=&f;f.next=&g;g.next=&h;h.next=&i;i.next=&h;    Solution sol;    ListNode * temp=sol.detectCycle(&a);    cout<<temp->val<<endl;//    cout<<(temp==NULL)<<endl;}






0 0
原创粉丝点击