Difference between revisions of "TADM2E 3.27"
From Algorithm Wiki
(Blanked the page) |
|||
Line 1: | Line 1: | ||
+ | <pre> | ||
+ | 1) Take two pointers Fast and Slow (Slow jumps one step at a time while Fast two step) | ||
+ | 2) While (Fast != NULL) | ||
+ | if(Fast == Slow) | ||
+ | return true; | ||
+ | else | ||
+ | fast = fast->next->next | ||
+ | slow = slow->next | ||
+ | 3) return false; | ||
+ | After detecting loop stop one pointer and increment other pointer by 1 step untill | ||
+ | Loop | ||
+ | if (fast == slow) | ||
+ | break; | ||
+ | else | ||
+ | slow++ | ||
+ | LoopLength++ | ||
+ | EndLoop | ||
+ | You can find out loop start position also. | ||
+ | Once you have LoopLenght. | ||
+ | |||
+ | 1. Fast = Slow = Start | ||
+ | 2. Fast += LoopLenght | ||
+ | 3. Loop | ||
+ | If Fast != Slow | ||
+ | Fast++; | ||
+ | Slow++ | ||
+ | EndLoop | ||
+ | 4. Fast and Slow Both are pointing to the start of loop position. Now you can break the Loop in link list. | ||
+ | </pre> | ||
+ | --[[User:Max|Max]] 06:18, 25 June 2010 (EDT) |
Latest revision as of 15:53, 23 July 2020
1) Take two pointers Fast and Slow (Slow jumps one step at a time while Fast two step) 2) While (Fast != NULL) if(Fast == Slow) return true; else fast = fast->next->next slow = slow->next 3) return false; After detecting loop stop one pointer and increment other pointer by 1 step untill Loop if (fast == slow) break; else slow++ LoopLength++ EndLoop You can find out loop start position also. Once you have LoopLenght. 1. Fast = Slow = Start 2. Fast += LoopLenght 3. Loop If Fast != Slow Fast++; Slow++ EndLoop 4. Fast and Slow Both are pointing to the start of loop position. Now you can break the Loop in link list.
--Max 06:18, 25 June 2010 (EDT)