A linked list is a Linear Data Structures, in which the elements are not stored at contiguous memory locations. The elements in a linked list are linked using pointers as shown in the below image:

In simple words, a linked list consists of nodes where each node contains a data field and a reference(link) to the next node in the list.
indexing in linked list is
unlike in a regular array when appending new elements require to copy the data sometimes which can be expensive. the linear list allow us to add a new element at index with no further consequences.

we have 2 linked list as above with a merging point
time complexity :
the first step will be
and than iterating again
therefore the time complexity will be
is there a better way to reach the same result?
we can perform the same algorithm in
find
iterate through
we will move
time complexity :
we will perform the same method as above but we will only work with elements where indexes are in jumps of power of
in this method what will happen is Geometric progression instead of Arithmetic progression
now
now we "create" a new
the problem got smaller now! cool right?

if we can mark every element that passed we can do this in
how ever the space complexity will also be
if we want to solve this without the extra space, we can check every element index and see if there are more than one index for the same element (by reference no value).
the element which start a circular linked list will always have 2 indexes, the first is
each element we will assume that his index
the time complexity is :
and if we perform the
another way is to iterate the list in a rabbit and turtle style :
one iterator will run 1 element at a time and the rabbit will jump 2 elements at a time ... they will surly meet in the circle. this will be a time complexity of
now if we want to find the first point which the circle start.
the algorithm will be :