// C++ program for above approach
#include <bits/stdc++.h>
#include <iostream>
using namespace std;
// Create a class Node to enter values and address in the
// list
class Node {
public:
int data;
Node* next;
Node(int x) {
data = x;
next = NULL;
}
};
// Function to reverse the linked list
void reverseLL(Node** head)
{
// Create a stack "s" of Node type
stack<Node*> s;
Node* temp = *head;
while (temp->next != NULL) {
// Push all the nodes in to stack
s.push(temp);
temp = temp->next;
}
*head = temp;
while (!s.empty()) {
// Store the top value of stack in list
temp->next = s.top();
// Pop the value from stack
s.pop();
// update the next pointer in the list
temp = temp->next;
}
temp->next = NULL;
}
// Function to Display the elements in List
void printlist(Node* temp)
{
while (temp != NULL) {
cout << temp->data << " ";
temp = temp->next;
}
}
// Program to insert back of the linked list
void insert_back(Node** head, int value)
{
// we have used insertion at back method to enter values
// in the list.(eg: head->1->2->3->4->Null)
Node* temp = new Node(value);
temp->next = NULL;
// If *head equals to NULL
if (*head == NULL) {
*head = temp;
return;
}
else {
Node* last_node = *head;
while (last_node->next != NULL)
last_node = last_node->next;
last_node->next = temp;
return;
}
}
// Driver Code
int main()
{
Node* head = NULL;
insert_back(&head, 1);
insert_back(&head, 2);
insert_back(&head, 3);
insert_back(&head, 4);
cout << "Given linked list\n";
printlist(head);
reverseLL(&head);
cout << "\nReversed linked list\n";
printlist(head);
return 0;
}
Ly8gQysrIHByb2dyYW0gZm9yIGFib3ZlIGFwcHJvYWNoCiNpbmNsdWRlIDxiaXRzL3N0ZGMrKy5oPgojaW5jbHVkZSA8aW9zdHJlYW0+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7CgovLyBDcmVhdGUgYSBjbGFzcyBOb2RlIHRvIGVudGVyIHZhbHVlcyBhbmQgYWRkcmVzcyBpbiB0aGUKLy8gbGlzdApjbGFzcyBOb2RlIHsKcHVibGljOgogICAgaW50IGRhdGE7CiAgICBOb2RlKiBuZXh0OwogICAgICBOb2RlKGludCB4KSB7CiAgICAgICAgZGF0YSA9IHg7CiAgICAgICAgIG5leHQgPSBOVUxMOwogICAgfQp9OwoKLy8gRnVuY3Rpb24gdG8gcmV2ZXJzZSB0aGUgbGlua2VkIGxpc3QKdm9pZCByZXZlcnNlTEwoTm9kZSoqIGhlYWQpCnsKICAgIC8vIENyZWF0ZSBhIHN0YWNrICJzIiBvZiBOb2RlIHR5cGUKICAgIHN0YWNrPE5vZGUqPiBzOwogICAgTm9kZSogdGVtcCA9ICpoZWFkOwogICAgd2hpbGUgKHRlbXAtPm5leHQgIT0gTlVMTCkgewogICAgICAgIC8vIFB1c2ggYWxsIHRoZSBub2RlcyBpbiB0byBzdGFjawogICAgICAgIHMucHVzaCh0ZW1wKTsKICAgICAgICB0ZW1wID0gdGVtcC0+bmV4dDsKICAgIH0KICAgICpoZWFkID0gdGVtcDsKICAgIHdoaWxlICghcy5lbXB0eSgpKSB7CiAgICAgICAgLy8gU3RvcmUgdGhlIHRvcCB2YWx1ZSBvZiBzdGFjayBpbiBsaXN0CiAgICAgICAgdGVtcC0+bmV4dCA9IHMudG9wKCk7CiAgICAgICAgLy8gUG9wIHRoZSB2YWx1ZSBmcm9tIHN0YWNrCiAgICAgICAgcy5wb3AoKTsKICAgICAgICAvLyB1cGRhdGUgdGhlIG5leHQgcG9pbnRlciBpbiB0aGUgbGlzdAogICAgICAgIHRlbXAgPSB0ZW1wLT5uZXh0OwogICAgfQogICAgdGVtcC0+bmV4dCA9IE5VTEw7Cn0KCi8vIEZ1bmN0aW9uIHRvIERpc3BsYXkgdGhlIGVsZW1lbnRzIGluIExpc3QKdm9pZCBwcmludGxpc3QoTm9kZSogdGVtcCkKewogICAgd2hpbGUgKHRlbXAgIT0gTlVMTCkgewogICAgICAgIGNvdXQgPDwgdGVtcC0+ZGF0YSA8PCAiICI7CiAgICAgICAgdGVtcCA9IHRlbXAtPm5leHQ7CiAgICB9Cn0KCi8vIFByb2dyYW0gdG8gaW5zZXJ0IGJhY2sgb2YgdGhlIGxpbmtlZCBsaXN0CnZvaWQgaW5zZXJ0X2JhY2soTm9kZSoqIGhlYWQsIGludCB2YWx1ZSkKewoKICAgIC8vIHdlIGhhdmUgdXNlZCBpbnNlcnRpb24gYXQgYmFjayBtZXRob2QgdG8gZW50ZXIgdmFsdWVzCiAgICAvLyBpbiB0aGUgbGlzdC4oZWc6IGhlYWQtPjEtPjItPjMtPjQtPk51bGwpCiAgICBOb2RlKiB0ZW1wID0gbmV3IE5vZGUodmFsdWUpOwogICAgdGVtcC0+bmV4dCA9IE5VTEw7CgogICAgLy8gSWYgKmhlYWQgZXF1YWxzIHRvIE5VTEwKICAgIGlmICgqaGVhZCA9PSBOVUxMKSB7CiAgICAgICAgKmhlYWQgPSB0ZW1wOwogICAgICAgIHJldHVybjsKICAgIH0KICAgIGVsc2UgewogICAgICAgIE5vZGUqIGxhc3Rfbm9kZSA9ICpoZWFkOwogICAgICAgIHdoaWxlIChsYXN0X25vZGUtPm5leHQgIT0gTlVMTCkKICAgICAgICAgICAgbGFzdF9ub2RlID0gbGFzdF9ub2RlLT5uZXh0OwogICAgICAgIGxhc3Rfbm9kZS0+bmV4dCA9IHRlbXA7CiAgICAgICAgcmV0dXJuOwogICAgfQp9CgovLyBEcml2ZXIgQ29kZQppbnQgbWFpbigpCnsKICAgIE5vZGUqIGhlYWQgPSBOVUxMOwogICAgaW5zZXJ0X2JhY2soJmhlYWQsIDEpOwogICAgaW5zZXJ0X2JhY2soJmhlYWQsIDIpOwogICAgaW5zZXJ0X2JhY2soJmhlYWQsIDMpOwogICAgaW5zZXJ0X2JhY2soJmhlYWQsIDQpOwogICAgY291dCA8PCAiR2l2ZW4gbGlua2VkIGxpc3RcbiI7CiAgICBwcmludGxpc3QoaGVhZCk7CiAgICByZXZlcnNlTEwoJmhlYWQpOwogICAgY291dCA8PCAiXG5SZXZlcnNlZCBsaW5rZWQgbGlzdFxuIjsKICAgIHByaW50bGlzdChoZWFkKTsKICAgIHJldHVybiAwOwp9Cg==