To reverse a linked list, you need to update the links between the nodes. The basic idea is to traverse the list while changing the next pointers to reverse the links.
Here is the C++ code to reverse a linked list:
TEXT/X-C++SRC
1#include <iostream>
2using namespace std;
3
4// Function to reverse a linked list
5void reverseList(Node* &head) {
6 Node* current = head;
7 Node* prev = nullptr;
8 Node* next = nullptr;
9
10 while (current != nullptr) {
11 next = current->next;
12 current->next = prev;
13 prev = current;
14 current = next;
15 }
16
17 head = prev;
18}
19
20int main() {
21 // Linked list nodes
22 Node* head = new Node(1);
23 Node* second = new Node(2);
24 Node* third = new Node(3);
25 Node* fourth = new Node(4);
26
27 // Connect nodes
28 head->next = second;
29 second->next = third;
30 third->next = fourth;
31
32 cout << "Original List: ";
33 printList(head);
34
35 // Reverse the list
36 reverseList(head);
37
38 cout << "Reversed List: ";
39 printList(head);
40
41 return 0;
42}Let's go through the code step by step:
- The function
reverseListtakes a reference to the head of the linked list as a parameter. - Inside the function, we define three pointers:
current,prev, andnext. - We initialize
currentwith the head of the linked list andprevandnextwithnullptr. - We then iterate through the list using a while loop until
currentbecomesnullptr. - Inside the loop, we first store the next node in the
nextpointer. - Then, we update the
nextpointer of the current node to point to the previous node. - After that, we update
prevto be the current node andcurrentto be the next node. - Once the loop ends, we update the head of the linked list to be the last node we reached (previously
prev). - Finally, we print the original and reversed lists using the
printListfunction.
The time complexity of this algorithm is O(n) as we need to traverse the entire list once to reverse it.
xxxxxxxxxx42
}using namespace std;// Function to reverse a linked listvoid reverseList(Node* &head) { Node* current = head; Node* prev = nullptr; Node* next = nullptr; while (current != nullptr) { next = current->next; current->next = prev; prev = current; current = next; } head = prev;}int main() { // Linked list nodes Node* head = new Node(1); Node* second = new Node(2); Node* third = new Node(3); Node* fourth = new Node(4); // Connect nodes head->next = second; second->next = third;OUTPUT
:001 > Cmd/Ctrl-Enter to run, Cmd/Ctrl-/ to comment



