#include <stdio.h>
#include <stdlib.h>
struct node {
int val;
struct node * next;
} ;
struct list {
struct node* first;
struct node* last;
} ;
struct list* makelist( ) {
struct list * l;
l
= ( struct list
* ) malloc ( sizeof ( struct list
) ) ; l-> first = NULL;
l-> last = NULL;
return l;
}
int addnode( struct list* l, int v) {
struct node* n;
int count= 0 ;
n
= ( struct node
* ) malloc ( sizeof ( struct node
) ) ; n-> val = v;
count+= 1 ;
if ( l-> first == NULL) {
l-> first = l-> last = n;
n-> next = n;
} else {
n-> next = l-> first;
l-> last-> next = n;
l-> last = n;
}
return count;
}
void printlist( struct list* l) {
if ( l == NULL || l-> last == NULL) {
}
else {
struct node* temp = l-> first;
do {
temp = temp-> next;
} while ( temp != l-> first ) ;
}
}
void freelist( struct list* l) {
if ( l-> first == NULL) {
return ;
}
struct node * temp = l-> first, * nextNode;
do {
nextNode = temp-> next;
temp = nextNode;
} while ( temp != l-> first) ;
}
void search( struct list* l, int cou, int sindex) {
if ( sindex> cou) {
}
else {
struct node* temp= l-> first;
while ( temp!= NULL) {
for ( int i= 0 ; cou; i++ ) {
if ( i== sindex) {
printf ( "Item found! %d" , temp
-> val
) ; }
else
temp= temp-> next;
}
}
}
}
int main( ) {
int cou= 0 , sindex;
int noOfNode;
char ope;
struct list * l = makelist( ) ;
printf ( "Kindly give the number of nodes to be added : " ) ; for ( int i= 0 ; i< noOfNode; i++ ) {
int num;
printf ( "Provide the number to be added to the List : " ) ; cou = addnode( l, num) ;
}
printf ( "Kindly provide the instruction to perform else type any other key \n P : Print\n K: Search\n " ) ; if ( ope== 'P' )
printlist( l) ;
else if ( ope== 'K' ) {
printf ( "Kindly give the Kth element index : " ) ; search( l, cou, sindex- 1 ) ;
}
freelist( l) ;
return 0 ;
}
I2luY2x1ZGUgPHN0ZGlvLmg+CiNpbmNsdWRlIDxzdGRsaWIuaD4Kc3RydWN0IG5vZGUgewogICAgaW50IHZhbDsKICAgIHN0cnVjdCBub2RlICpuZXh0OwoKfTsKCnN0cnVjdCBsaXN0IHsKICAgIHN0cnVjdCBub2RlKiBmaXJzdDsKICAgIHN0cnVjdCBub2RlKiBsYXN0Owp9OwoKc3RydWN0IGxpc3QqIG1ha2VsaXN0KCkgewogICAgc3RydWN0IGxpc3QgKmw7CiAgICBsID0gKHN0cnVjdCBsaXN0KiltYWxsb2Moc2l6ZW9mKHN0cnVjdCBsaXN0KSk7CiAgICBsLT5maXJzdCA9IE5VTEw7CiAgICBsLT5sYXN0ID0gTlVMTDsKICAgIHJldHVybiBsOwp9CgppbnQgYWRkbm9kZShzdHJ1Y3QgbGlzdCogbCwgaW50IHYpIHsKICAgIHN0cnVjdCBub2RlKiBuOwogICAgaW50IGNvdW50PTA7CiAgICBuID0gKHN0cnVjdCBub2RlKiltYWxsb2Moc2l6ZW9mKHN0cnVjdCBub2RlKSk7CiAgICBuLT52YWwgPSB2OwogICAgY291bnQrPTE7CiAgICBpZiAobC0+Zmlyc3QgPT0gTlVMTCkgewogICAgICAgIGwtPmZpcnN0ID0gbC0+bGFzdCA9IG47CiAgICAgICAgbi0+bmV4dCA9IG47CiAgICB9IGVsc2UgewogICAgCW4tPm5leHQgPSBsLT5maXJzdDsKICAgICAgICBsLT5sYXN0LT5uZXh0ID0gbjsKICAgICAgICBsLT5sYXN0ID0gbjsKICAgIH0KICAgIHJldHVybiBjb3VudDsKfQp2b2lkIHByaW50bGlzdChzdHJ1Y3QgbGlzdCogbCkgewoJaWYgKGwgPT0gTlVMTCB8fCBsLT5sYXN0ID09IE5VTEwpIHsKICAgICAgICBwcmludGYoIkxpc3QgaXMgZW1wdHlcbiIpOwogICAgfQogICAgZWxzZXsKICAgICAgICBzdHJ1Y3Qgbm9kZSogdGVtcCA9IGwtPmZpcnN0OwogICAgICAgIHByaW50ZigiTGlua2VkIExpc3Q6ICIpOwogICAgICAgIGRvIHsKICAgICAgICAgICAgcHJpbnRmKCIlZCAtPiAiLCB0ZW1wLT52YWwpOwogICAgICAgICAgICB0ZW1wID0gdGVtcC0+bmV4dDsKICAgIAoJfXdoaWxlICh0ZW1wICE9IGwtPmZpcnN0ICk7Cn0KICAgIHByaW50ZigiTlVMTFxuIik7Cn0Kdm9pZCBmcmVlbGlzdChzdHJ1Y3QgbGlzdCogbCkgewogICAgaWYgKGwtPmZpcnN0ID09IE5VTEwpIHsKICAgICAgICBmcmVlKGwpOwogICAgICAgIHJldHVybjsKICAgIH0KCiAgICBzdHJ1Y3Qgbm9kZSAqdGVtcCA9IGwtPmZpcnN0LCAqbmV4dE5vZGU7CiAgICBkbyB7CiAgICAgICAgbmV4dE5vZGUgPSB0ZW1wLT5uZXh0OwogICAgICAgIGZyZWUodGVtcCk7CiAgICAgICAgdGVtcCA9IG5leHROb2RlOwogICAgfSB3aGlsZSAodGVtcCAhPSBsLT5maXJzdCk7CgogICAgZnJlZShsKTsKfQp2b2lkIHNlYXJjaChzdHJ1Y3QgbGlzdCpsLGludCBjb3UsaW50IHNpbmRleCl7CglpZihzaW5kZXg+Y291KXsKCQlwcmludGYoIkluZGV4IG91dCBvZiByYW5nZSIpOwoJfQoJZWxzZXsKCXN0cnVjdCBub2RlKiB0ZW1wPWwtPmZpcnN0OwoJd2hpbGUodGVtcCE9TlVMTCl7CgkJZm9yKGludCBpPTA7Y291O2krKyl7CgkJaWYoaT09c2luZGV4KXsKCQkJcHJpbnRmKCJJdGVtIGZvdW5kISAlZCIsdGVtcC0+dmFsKTsKCQl9CgkJZWxzZQoJCXRlbXA9dGVtcC0+bmV4dDsKCX0KCX0KfQp9CmludCBtYWluKCkgewoJaW50IGNvdT0wLHNpbmRleDsKCWludCBub09mTm9kZTsKICAgIGNoYXIgb3BlOwogICAgc3RydWN0IGxpc3QgKmwgPSBtYWtlbGlzdCgpOwogICAgcHJpbnRmKCJLaW5kbHkgZ2l2ZSB0aGUgbnVtYmVyIG9mIG5vZGVzIHRvIGJlIGFkZGVkIDogIik7CiAgICBzY2FuZigiJWQiLCZub09mTm9kZSk7CiAgICBmb3IoaW50IGk9MDtpPG5vT2ZOb2RlO2krKyl7CiAgICAgICAgaW50IG51bTsKICAgICAgICBwcmludGYoIlByb3ZpZGUgdGhlIG51bWJlciB0byBiZSBhZGRlZCB0byB0aGUgTGlzdCA6ICIpOwogICAgICAgIHNjYW5mKCIlZCIsJm51bSk7CiAgICAgICAgY291ID0gYWRkbm9kZShsLG51bSk7CiAgICB9CiAgICBwcmludGYoIktpbmRseSBwcm92aWRlIHRoZSBpbnN0cnVjdGlvbiB0byBwZXJmb3JtIGVsc2UgdHlwZSBhbnkgb3RoZXIga2V5IFxuIFAgOiBQcmludFxuIEs6IFNlYXJjaFxuIik7CiAgICBzY2FuZigiICVjIiwmb3BlKTsKICAgIGlmKG9wZT09J1AnKQogICAgICAgIHByaW50bGlzdChsKTsKICAgIGVsc2UgaWYob3BlPT0nSycpewogICAgICAgIHByaW50ZigiS2luZGx5IGdpdmUgdGhlIEt0aCBlbGVtZW50IGluZGV4IDogIik7CiAgICAgICAgc2NhbmYoIiVkIiwmc2luZGV4KTsKICAgICAgICBzZWFyY2gobCxjb3Usc2luZGV4LTEpOwogICAgfQogICAgZnJlZWxpc3QobCk7CiAgICByZXR1cm4gMDsKfQ==