#include<bits/stdc++.h>
using namespace std;
struct Node
{
int data;
struct Node *next;
};
struct Node *addToEmpty(struct Node *last, int data)
{
// This function is only for empty list
if (last != NULL)
return last;
// Creating a node dynamically.
struct Node *temp =
(struct Node
*)malloc(sizeof(struct Node
));
// Assigning the data.
temp -> data = data;
last = temp;
// Creating the link.
last -> next = last;
return last;
}
struct Node *addBegin(struct Node *last, int data)
{
if (last == NULL)
return addToEmpty(last, data);
struct Node *temp =
(struct Node
*)malloc(sizeof(struct Node
));
temp -> data = data;
temp -> next = last -> next;
last -> next = temp;
return last;
}
struct Node *addEnd(struct Node *last, int data)
{
if (last == NULL)
return addToEmpty(last, data);
struct Node *temp =
(struct Node
*)malloc(sizeof(struct Node
));
temp -> data = data;
temp -> next = last -> next;
last -> next = temp;
last = temp;
return last;
}
struct Node *addAfter(struct Node *last, int data, int item)
{
if (last == NULL)
return NULL;
struct Node *temp, *p;
p = last -> next;
do
{
if (p ->data == item)
{
temp
= (struct Node
*)malloc(sizeof(struct Node
)); temp -> data = data;
temp -> next = p -> next;
p -> next = temp;
if (p == last)
last = temp;
return last;
}
p = p -> next;
} while(p != last -> next);
cout << item << " not present in the list." << endl;
return last;
}
void traverse(struct Node *last)
{
struct Node *p;
// If list is empty, return.
if (last == NULL)
{
cout << "List is empty." << endl;
return;
}
// Pointing to first Node of the list.
p = last -> next;
// Traversing the list.
do
{
cout << p -> data << " ";
p = p -> next;
}
while(p != last->next);
}
// Driven Program
int main()
{
struct Node *last = NULL;
last = addToEmpty(last, 6);
last = addBegin(last, 4);
last = addBegin(last, 2);
last = addEnd(last, 8);
last = addEnd(last, 12);
last = addAfter(last, 10, 8);
traverse(last);
return 0;
}
I2luY2x1ZGU8Yml0cy9zdGRjKysuaD4gCnVzaW5nIG5hbWVzcGFjZSBzdGQ7IAogIApzdHJ1Y3QgTm9kZSAKeyAKICAgIGludCBkYXRhOyAKICAgIHN0cnVjdCBOb2RlICpuZXh0OyAKfTsgCiAgCnN0cnVjdCBOb2RlICphZGRUb0VtcHR5KHN0cnVjdCBOb2RlICpsYXN0LCBpbnQgZGF0YSkgCnsgCiAgICAvLyBUaGlzIGZ1bmN0aW9uIGlzIG9ubHkgZm9yIGVtcHR5IGxpc3QgCiAgICBpZiAobGFzdCAhPSBOVUxMKSAKICAgICAgcmV0dXJuIGxhc3Q7IAogIAogICAgLy8gQ3JlYXRpbmcgYSBub2RlIGR5bmFtaWNhbGx5LiAKICAgIHN0cnVjdCBOb2RlICp0ZW1wID0gIAogICAgICAgICAgIChzdHJ1Y3QgTm9kZSopbWFsbG9jKHNpemVvZihzdHJ1Y3QgTm9kZSkpOyAKICAKICAgIC8vIEFzc2lnbmluZyB0aGUgZGF0YS4gCiAgICB0ZW1wIC0+IGRhdGEgPSBkYXRhOyAKICAgIGxhc3QgPSB0ZW1wOyAKICAKICAgIC8vIENyZWF0aW5nIHRoZSBsaW5rLiAKICAgIGxhc3QgLT4gbmV4dCA9IGxhc3Q7IAogIAogICAgcmV0dXJuIGxhc3Q7IAp9IAogIApzdHJ1Y3QgTm9kZSAqYWRkQmVnaW4oc3RydWN0IE5vZGUgKmxhc3QsIGludCBkYXRhKSAKeyAKICAgIGlmIChsYXN0ID09IE5VTEwpIAogICAgICAgIHJldHVybiBhZGRUb0VtcHR5KGxhc3QsIGRhdGEpOyAKICAKICAgIHN0cnVjdCBOb2RlICp0ZW1wID0gIAogICAgICAgICAgICAoc3RydWN0IE5vZGUgKiltYWxsb2Moc2l6ZW9mKHN0cnVjdCBOb2RlKSk7IAogIAogICAgdGVtcCAtPiBkYXRhID0gZGF0YTsgCiAgICB0ZW1wIC0+IG5leHQgPSBsYXN0IC0+IG5leHQ7IAogICAgbGFzdCAtPiBuZXh0ID0gdGVtcDsgCiAgCiAgICByZXR1cm4gbGFzdDsgCn0gCiAgCnN0cnVjdCBOb2RlICphZGRFbmQoc3RydWN0IE5vZGUgKmxhc3QsIGludCBkYXRhKSAKeyAKICAgIGlmIChsYXN0ID09IE5VTEwpIAogICAgICAgIHJldHVybiBhZGRUb0VtcHR5KGxhc3QsIGRhdGEpOyAKICAgICAgCiAgICBzdHJ1Y3QgTm9kZSAqdGVtcCA9ICAKICAgICAgICAoc3RydWN0IE5vZGUgKiltYWxsb2Moc2l6ZW9mKHN0cnVjdCBOb2RlKSk7IAogIAogICAgdGVtcCAtPiBkYXRhID0gZGF0YTsgCiAgICB0ZW1wIC0+IG5leHQgPSBsYXN0IC0+IG5leHQ7IAogICAgbGFzdCAtPiBuZXh0ID0gdGVtcDsgCiAgICBsYXN0ID0gdGVtcDsgCiAgCiAgICByZXR1cm4gbGFzdDsgCn0gCiAgCnN0cnVjdCBOb2RlICphZGRBZnRlcihzdHJ1Y3QgTm9kZSAqbGFzdCwgaW50IGRhdGEsIGludCBpdGVtKSAKeyAKICAgIGlmIChsYXN0ID09IE5VTEwpIAogICAgICAgIHJldHVybiBOVUxMOyAKICAKICAgIHN0cnVjdCBOb2RlICp0ZW1wLCAqcDsgCiAgICBwID0gbGFzdCAtPiBuZXh0OyAKICAgIGRvCiAgICB7IAogICAgICAgIGlmIChwIC0+ZGF0YSA9PSBpdGVtKSAKICAgICAgICB7IAogICAgICAgICAgICB0ZW1wID0gKHN0cnVjdCBOb2RlICopbWFsbG9jKHNpemVvZihzdHJ1Y3QgTm9kZSkpOyAKICAgICAgICAgICAgdGVtcCAtPiBkYXRhID0gZGF0YTsgCiAgICAgICAgICAgIHRlbXAgLT4gbmV4dCA9IHAgLT4gbmV4dDsgCiAgICAgICAgICAgIHAgLT4gbmV4dCA9IHRlbXA7IAogIAogICAgICAgICAgICBpZiAocCA9PSBsYXN0KSAKICAgICAgICAgICAgICAgIGxhc3QgPSB0ZW1wOyAKICAgICAgICAgICAgcmV0dXJuIGxhc3Q7IAogICAgICAgIH0gCiAgICAgICAgcCA9IHAgLT4gbmV4dDsgCiAgICB9ICB3aGlsZShwICE9IGxhc3QgLT4gbmV4dCk7IAogIAogICAgY291dCA8PCBpdGVtIDw8ICIgbm90IHByZXNlbnQgaW4gdGhlIGxpc3QuIiA8PCBlbmRsOyAKICAgIHJldHVybiBsYXN0OyAKICAKfSAKICAKdm9pZCB0cmF2ZXJzZShzdHJ1Y3QgTm9kZSAqbGFzdCkgCnsgCiAgICBzdHJ1Y3QgTm9kZSAqcDsgCiAgCiAgICAvLyBJZiBsaXN0IGlzIGVtcHR5LCByZXR1cm4uIAogICAgaWYgKGxhc3QgPT0gTlVMTCkgCiAgICB7IAogICAgICAgIGNvdXQgPDwgIkxpc3QgaXMgZW1wdHkuIiA8PCBlbmRsOyAKICAgICAgICByZXR1cm47IAogICAgfSAKICAKICAgIC8vIFBvaW50aW5nIHRvIGZpcnN0IE5vZGUgb2YgdGhlIGxpc3QuIAogICAgcCA9IGxhc3QgLT4gbmV4dDsgCiAgCiAgICAvLyBUcmF2ZXJzaW5nIHRoZSBsaXN0LiAKICAgIGRvCiAgICB7IAogICAgICAgIGNvdXQgPDwgcCAtPiBkYXRhIDw8ICIgIjsgCiAgICAgICAgcCA9IHAgLT4gbmV4dDsgCiAgCiAgICB9IAogICAgd2hpbGUocCAhPSBsYXN0LT5uZXh0KTsgCiAgCn0gCiAgCi8vIERyaXZlbiBQcm9ncmFtIAppbnQgbWFpbigpIAp7IAogICAgc3RydWN0IE5vZGUgKmxhc3QgPSBOVUxMOyAKICAKICAgIGxhc3QgPSBhZGRUb0VtcHR5KGxhc3QsIDYpOyAKICAgIGxhc3QgPSBhZGRCZWdpbihsYXN0LCA0KTsgCiAgICBsYXN0ID0gYWRkQmVnaW4obGFzdCwgMik7IAogICAgbGFzdCA9IGFkZEVuZChsYXN0LCA4KTsgCiAgICBsYXN0ID0gYWRkRW5kKGxhc3QsIDEyKTsgCiAgICBsYXN0ID0gYWRkQWZ0ZXIobGFzdCwgMTAsIDgpOyAKICAKICAgIHRyYXZlcnNlKGxhc3QpOyAKICAKICAgIHJldHVybiAwOyAKfSA=