|
|
| 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)
| |