关于链表中是否带环并且找到环的入口点
面试题一:判断链表是否带环
int FndLoop(pLinkList list) { pLinkNode fast=list->pHead; pLinkNode slow=list->pHead; assert(list); while(fast!=NULL && fast->next!=NULL) { slow=slow->next; fast=fast->next->next; if( fast!=NULL && slow==fast) { return 1;//有环 } } return 0;//无环 }
面试题二:找到环的入口点
pLinkNode FndLoopNode(pLinkList list) { pLinkNode fast=list->pHead; pLinkNode slow=list->pHead; assert(list); while(fast!=NULL && fast->next!=NULL) { slow=slow->next; fast=fast->next->next; if( fast!=NULL && slow==fast) { break; } } slow=list->pHead; while(slow!=fast) { slow=slow->next; fast=fast->next; } return slow; }