


The given linked list is 1 -> 2 -> 3 -> 4-> NULL. Then the reverse linked list is 4 -> 3 -> 2 -> 1 -> NULL and the head of the reversed linked list will be 4.
Can you solve this problem in O(N) time and O(1) space complexity?
The first line of input contains an integer 'T' representing the number of test cases or queries to be processed. Then the test case follows.
The only line of each test case contains the elements of the singly linked list separated by a single space and terminated by -1. Hence, -1 would never be a list element.
For each test case, print the given linked list in reverse order in a separate line.
You do not need to print anything, it has already been taken care of. Just implement the given function.
1 <= T <= 5
0 <= L <= 10^5
1 <= data <= 10^9 and data != -1
Time Limit: 1 sec
The brute force approach is to use recursion. First, we reach the end of the Linked List recursively and at last node, we return the last node, which becomes the new head of the partially reversed Linked List. While coming back from each recursion call we add the current node in the current recursion call to the last node of the partially reversed Linked List and assign the current node to null.
We can improve our time complexity of finding the last node of partial reverse Linked List by the current node of each recursion call. If we look closer than the current node next is actually the last node of the reverse Linked List that can be found in constant time.
This approach is similar to the previous approach. While we are iterating the linked list we were swapping pointers using the third pointer, but in this approach, we will swap the pointers using only two pointers(one itself the given head) by using the property of XOR:
The property of XOR is: