您的位置:首页 > 其它

Linked List Cycle II

2014-11-28 16:49 169 查看
Given a linked list, return the node where the cycle begins. If there is no cycle, return
null
.

Follow up:

Can you solve it without using extra space?

#include<stdio.h>
#include<stdlib.h>

typedef struct ListNode {
int val;
struct ListNode *next;
}*ListNode;

ListNode* detectCycle(ListNode *head) {
ListNode *p1,*p2,*p3;
int n,m,flag;
if(head==NULL||head->next==NULL) return NULL;
if(head->next==head) return head;
for(p1=p2=head;p1!=NULL&&p1->next!=NULL;){
p1=p1->next->next;
p2=p2->next;
if(p1==p2) break;
}
if(p1==NULL || p1->next==NULL) return NULL;
n=1;
while(p1->next!=p2){
p1=p1->next;
n++;
}
for(p1=head; p1!=p2; p1=p1->next){
for(p3=p1, m=0, flag=0; p3->next!=p1 && m<=n; p3=p3->next){
if(p3==p2) flag=1;
if(flag==1) m++;
}
if(p3->next==p1) return p1;
}
return p2;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: