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.