So, I am facing a doubt here.
I was reading the book Cracking the coding Interview. The following text is written over there.
Suppose you had a linked list
Let n = 2. We are starting with a list:
a1 -> a2 -> b1 -> b2
Let p1 be a "fast" pointer initially pointing to the successor of head.
Let p2 be a "slow" pointer initially pointing to the head.
p1
a1 -> a2 -> b1 -> b2
p2
We move p1 by two and p2 by one until p1 reaches the end of the list (there is no next).
p1
a1 -> a2 -> b1 -> b2
p2
Move p1 back to the head.
p1
a1 -> a2 -> b1 -> b2
p2
Advance p2.
p1
a1 -> a2 -> b1 -> b2
p2
"Weaving" starts.
Take element pointed by p2 and move it after p1. Advance p1 after inserted element.
p1
a1 -> b1 -> a2 -> b2
p2
Take element pointed by p2 and move it after p1. Advance p1 after inserted element.
p1
a1 -> b1 -> a2 -> b2
p2
p1 is null, terminate.