I have a problem statement like: “How to find the middle node of a singly linked list in only one traversal, and the twist is we don’t know the number of nodes in the linked list?”
I have an answer like “take a vector and start pushing all the nodes’ addresses as and when you are traversing the linked list and increment a counter till you reach the end of the list”. So at the end we can get the number of nodes in the list and if even (counter/2) or if odd (counter/2 + counter%2) gives the middle node number and with this we can get vectore.at(middlenodenumber) points to the middle node”.
This is fine…but this is waste of memory storing all the address of a very large linked list! So how can we have a better solution?
Following are the steps:
*p1and*p2pointing to the head of linkedlist
*p2, 2 times (with null checks)*p2is not null then increment*p11 time*p2reaches null; you have got the*p1at the center[Note: You can use iterators instead of pointer if you deal with container type linked list]