# reverse a linked list

Examples: Input: Head of following linked list 1->2->3->4->NULL Output: Linked list should be changed to, 4->3->2->1->NULL. Reverse a Linked List using Iterative Solution. Example. Last updated: October 11, 2018. Get hold of all the important DSA concepts with the DSA Self Paced Course at a student-friendly price and become industry ready. If the linked list has 0 or only 1 node, then it does not make sense to reverse the list, so we can simply return then and there. Therefore, the running time of the iterative algorithm is , where is the total number of elements of the linked list. ((original list length - current node index) * 2 + 1 ) * size of node. The high level overview of all the articles on the site. So the new linked list after performing reverse operation becomes 40->30->20->10->NULL. The loop traverses the whole linked list once. Run a loop till current points to NULL. Assuming we have >=2 nodes now, we can do the following. Initialize the current pointer as the head. Please use ide.geeksforgeeks.org, generate link and share the link here. We have reversed the linked list by changing the links between them. Approach: Iterative: Create 3 nodes, currNode, PrevNode and nextNode. The next of ptrB is linked to ptrA because the ptrB which is pointing to the first node becomes the tail node in the reversed list. Reverse Linked List. Therefore, we can reverse the last two elements, and , with the above two operations. Below is the implementation of the above approach: edit Experience. Let us get over with the base cases first. Initialize three pointers prev as NULL, curr as head and next as NULL. All the linked list reversing algorithms assume that the given linked list is a double linked list. A data structure consisting of nodes where data and a pointer is present in every node and the pointer points to the next node is called a Linked list which is different from an array and when such a linked list is reversed, it is called reversed linked list. In the end, the pointer will point to the new head element of the reversed linked list. Can we reverse a linked list in less than O(n)? Don’t stop learning now. Technique 1 In this way, a new linked list will be created and all the items of the first linked list will be added to the new linked list in reverse … Also, we discussed two algorithms that can reverse a linked list in linear time. Here is a common JavaScript interview question: Reverse a singly linked list. Please write to us at [email protected] to report any issue with the above content. Below is the implementation of this method. We need to reverse the list by changing links between nodes. An interesting method to print reverse of a linked list, Reverse a Linked List according to its Size, Reverse a Doubly linked list using recursion. We use cookies to ensure you have the best browsing experience on our website. Objective: Reverse the given linked list. Start popping the nodes(value and address) and store them in the same order until the stack is empty. This is the code I have come up with: public static void Reverse(ref Node root) { Node tmp = root; Node nroot = null; Node prev = null; while (tmp != null) { //Make a new node and copy tmp nroot = new Node(); nroot.data = tmp.data; nroot.next = prev; … In loop, do following. Let us get over with the base cases first. Therefore, we can reverse the last two elements, and , with the above two operations. Steps to reverse a Singly Linked List. after you are done, get the pointer of the first node after your original list to point at a reversed list. Since each element only has one reference to the next element, we need another pointer, ,  to store the next element before changing the pointer. The reversing of the linked list begins by initializing the ptrA to Null. Update the next pointer of last Node in the stack by NULL. Method 1 is the most straight forward and it can be implemented pretty quickly. In this tutorial, we showed a sample linked list and its reversal. Then, in each iteration of the loop, we reverse the linked pointer of these two elements and shift the and pointers to the next two elements. NOTE : Click Reverse a Linked List – Part 2 to see the another implementation of this problem. By using our site, you the second node head = head->next. Easy. Introduction to Reverse Linked List in Java. If the reversing requires to keep the link list nodes at their same position, technique 2 will fail. Finally, we reverse and elements to finish the reversal. head should now point to its next node i.e. Approach for reverse a linked list Iterative approach. Recursively Reversing a linked list (A simple implementation) Last Updated: 26-11-2019 Given pointer to the head node of a linked list, the task is to recursively reverse the linked list. If the linked list has 0 or only 1 node, then it does not make sense to reverse the list, so we can simply return then and there. We should change that to make it point to . In this tutorial, we’ll show how to reverse a linked list. 206. Reverse linked list formed from the above linked list − 85 -> 10 -> 65 -> 32 -> 9 -> NULL. Conclusion. Make sure that prevNode points to first node i.e. The head node of the linked list will be the last node of the linked list and the last one will be the head node. In Computer Science, a linked list is a linear data structure in which a pointer in each element determines the order. Example 2: Input: LinkedList: 2->7->8->9->10 Output: 10 9 8 7 2 Explanation: After reversing the list, elements are 10->9->8->7->2. Do it in-place. Initialize previous and the next pointer as NULL. JavaScript: Reverse a Linked List. We can use a pointer to point to the start element of a linked list: After we reverse the linked list, the will point to the last element of the original linked list, and the pointer of each element will point to the previous element of the original linked list: Firstly, let’s solve a simpler version of the problem: reverse a linked list with two elements: Suppose the pointer points to the second element and the pointer points to the element before the element, we can switch the link order between them with two operations: For a linked list with more than two elements, we can traverse the linked list and use the same strategy to reverse the current element’s next pointer: In this iterative algorithm, we first set the pointer as a pointer and the as the . Iterate through the linked list. acknowledge that you have read and understood our, GATE CS Original Papers and Official Keys, ISRO CS Original Papers and Official Keys, ISRO CS Syllabus for Scientist/Engineer Exam, Write a function that counts the number of times a given int occurs in a Linked List, Add two numbers represented by linked lists | Set 1, Add two numbers represented by linked lists | Set 2, Add Two Numbers Represented by Linked Lists | Set 3, Reverse a Linked List in groups of given size | Set 1, Reverse a Linked List in groups of given size | Set 2, Reverse alternate K nodes in a Singly Linked List, Alternate Odd and Even Nodes in a Singly Linked List, Alternating split of a given Singly Linked List | Set 1, Program for n’th node from the end of a Linked List, Find the middle of a given linked list in C and Java, Stack Data Structure (Introduction and Program), Doubly Linked List | Set 1 (Introduction and Insertion), Recursively Reversing a linked list (A simple implementation), Iteratively Reverse a linked list using only 2 pointers (An Interesting Method), http://cslibrary.stanford.edu/105/LinkedListProblems.pdf, XOR Linked List - A Memory Efficient Doubly Linked List | Set 1, XOR Linked List – A Memory Efficient Doubly Linked List | Set 2, Merge a linked list into another linked list at alternate positions, Convert singly linked list into circular linked list, Difference between Singly linked list and Doubly linked list, Convert Singly Linked List to XOR Linked List, Create new linked list from two given linked list with greater element at each node, Check if a linked list is Circular Linked List, Generate Linked List consisting of maximum difference of squares of pairs of nodes from given Linked List, Given a linked list, reverse alternate nodes and append at the end, Merge two sorted linked lists such that merged list is in reverse order, Iteratively Reverse a linked list using only 2 pointers (An Interesting Method).