// Iterative C++ program to reverse a linked list
#include <bits/stdc++.h>
using namespace std;
// link list node
struct Node {
int data;
struct Node* next;
Node(int data)
{
this->data = data;
next = NULL;
}
};
struct LinkedList {
Node* head;
LinkedList() { head = NULL; }
//reverse the linked list
void reverse()
{
// Initiate current, previous and next pointers
Node* current = head;
Node *prev = NULL, *next = NULL;
while (current != NULL) {
// store next pointer
next = current->next;
// reverse current node's pointer
current->next = prev;
// move pointers one position ahead.
prev = current;
current = next;
}
head = prev;
}
// print the linked list
void print()
{
struct Node* temp = head;
while (temp != NULL) {
cout << temp->data << " ";
temp = temp->next;
}
}
void push(int data)
{
Node* temp = new Node(data);
temp->next = head;
head = temp;
}
};
int main()
{
// store value in list
LinkedList ll;
int len;
cout << "enter the length\n ";
cin >> len;
cout << "value is: " << len << endl;
for(int i = 0; i < len; i++){
int value;
cin >> value;
ll.push(value);
}
cout << "Given linked list\n";
ll.print();
ll.reverse();
cout << "\nReversed linked list \n";
ll.print();
return 0;
}
Ly8gSXRlcmF0aXZlIEMrKyBwcm9ncmFtIHRvIHJldmVyc2UgYSBsaW5rZWQgbGlzdAojaW5jbHVkZSA8Yml0cy9zdGRjKysuaD4KdXNpbmcgbmFtZXNwYWNlIHN0ZDsKCi8vIGxpbmsgbGlzdCBub2RlIApzdHJ1Y3QgTm9kZSB7CiAgICBpbnQgZGF0YTsKICAgIHN0cnVjdCBOb2RlKiBuZXh0OwogICAgTm9kZShpbnQgZGF0YSkKICAgIHsKICAgICAgICB0aGlzLT5kYXRhID0gZGF0YTsKICAgICAgICBuZXh0ID0gTlVMTDsKICAgIH0KfTsKCnN0cnVjdCBMaW5rZWRMaXN0IHsKICAgIE5vZGUqIGhlYWQ7CiAgICBMaW5rZWRMaXN0KCkgeyBoZWFkID0gTlVMTDsgfQoKICAgIC8vcmV2ZXJzZSB0aGUgbGlua2VkIGxpc3QgCiAgICB2b2lkIHJldmVyc2UoKQogICAgewogICAgICAgIC8vIEluaXRpYXRlIGN1cnJlbnQsIHByZXZpb3VzIGFuZCBuZXh0IHBvaW50ZXJzCiAgICAgICAgTm9kZSogY3VycmVudCA9IGhlYWQ7CiAgICAgICAgTm9kZSAqcHJldiA9IE5VTEwsICpuZXh0ID0gTlVMTDsKCiAgICAgICAgd2hpbGUgKGN1cnJlbnQgIT0gTlVMTCkgewogICAgICAgICAgICAvLyBzdG9yZSBuZXh0IHBvaW50ZXIKICAgICAgICAgICAgbmV4dCA9IGN1cnJlbnQtPm5leHQ7CiAgICAgICAgICAgIC8vIHJldmVyc2UgY3VycmVudCBub2RlJ3MgcG9pbnRlcgogICAgICAgICAgICBjdXJyZW50LT5uZXh0ID0gcHJldjsKICAgICAgICAgICAgLy8gbW92ZSBwb2ludGVycyBvbmUgcG9zaXRpb24gYWhlYWQuCiAgICAgICAgICAgIHByZXYgPSBjdXJyZW50OwogICAgICAgICAgICBjdXJyZW50ID0gbmV4dDsKICAgICAgICB9CiAgICAgICAgaGVhZCA9IHByZXY7CiAgICB9CgogICAgLy8gcHJpbnQgdGhlIGxpbmtlZCBsaXN0CiAgICB2b2lkIHByaW50KCkKICAgIHsKICAgICAgICBzdHJ1Y3QgTm9kZSogdGVtcCA9IGhlYWQ7CiAgICAgICAgd2hpbGUgKHRlbXAgIT0gTlVMTCkgewogICAgICAgICAgICBjb3V0IDw8IHRlbXAtPmRhdGEgPDwgIiAiOwogICAgICAgICAgICB0ZW1wID0gdGVtcC0+bmV4dDsKICAgICAgICB9CiAgICB9CgogICAgdm9pZCBwdXNoKGludCBkYXRhKQogICAgewogICAgICAgIE5vZGUqIHRlbXAgPSBuZXcgTm9kZShkYXRhKTsKICAgICAgICB0ZW1wLT5uZXh0ID0gaGVhZDsKICAgICAgICBoZWFkID0gdGVtcDsKICAgIH0KfTsKCgppbnQgbWFpbigpCnsKICAgIC8vIHN0b3JlIHZhbHVlIGluIGxpc3QKICAgIExpbmtlZExpc3QgbGw7CglpbnQgbGVuOwoJY291dCA8PCAiZW50ZXIgdGhlIGxlbmd0aFxuICI7CgljaW4gPj4gbGVuOwoJY291dCA8PCAidmFsdWUgaXM6ICIgPDwgbGVuIDw8IGVuZGw7Cglmb3IoaW50IGkgPSAwOyBpIDwgbGVuOyBpKyspewoJCWludCB2YWx1ZTsKCQljaW4gPj4gdmFsdWU7CgkJbGwucHVzaCh2YWx1ZSk7Cgl9CgogICAgY291dCA8PCAiR2l2ZW4gbGlua2VkIGxpc3RcbiI7CiAgICBsbC5wcmludCgpOwoKICAgIGxsLnJldmVyc2UoKTsKCiAgICBjb3V0IDw8ICJcblJldmVyc2VkIGxpbmtlZCBsaXN0IFxuIjsKICAgIGxsLnByaW50KCk7CiAgICByZXR1cm4gMDsKfQo=