欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Find Circle Entry for Linked List 博客分类: Algorithm algorithmlinked listcircle 

程序员文章站 2024-03-15 08:04:23
...

The thinking about this question comes from Question 142 and 287 in LeetCode.

 

We all know that we can use two pointers to decide if there is a circle in a list:

fast: move 2 steps each time

slow: move 1 step each time

If slow meet fast in a certain moment, then this list has a circle.

 

Now I would like to show how we can find the entry of circle. Here is the demonstration:

 

Find Circle Entry for Linked List
            
    
    博客分类: Algorithm algorithmlinked listcircle  

 

First we define some variables:

s: when slow meet fast, the steps slow moves (so fast moves 2s steps)

x: the length from head to circle entry (this is what we  want to know)

c: the length of the circle

a: the length from entry points to meet points

we have: 2s = s + n*c (n is a positive integer)

                 s = x + a

so we have : x + a = n*c

                     x = (n-1)*c + c - a

c - a means the length from meet point to circle entry

we can consider the left side of expression as a new pointer who moves x steps from list head.

the right side: the slow moves n-1 circle plus the length from meet point to the entry.

 

So we can get the entry when new pointer meet slow.

 

  • Find Circle Entry for Linked List
            
    
    博客分类: Algorithm algorithmlinked listcircle 
  • 大小: 53.4 KB