#include<stdio.h>
#include<stdlib.h>
typedef struct node{
int data;
struct node * nxt;
} node;
node* createNode( int data) {
node
* tmp
= ( node
* ) malloc ( sizeof ( node
) ) ; tmp-> data= data;
tmp-> nxt= NULL;
return tmp;
}
node* addHead( node * head, int data) {
if ( ! head)
return head= createNode( data) ;
node * tmp= createNode( data) ;
tmp-> nxt= head;
return head= tmp;
}
node * addTail( node* head, int data) {
if ( ! head)
return head= createNode( data) ;
node* tmp= head;
while ( tmp-> nxt)
tmp= tmp-> nxt;
tmp-> nxt= createNode( data) ;
return head;
}
node* addBefore( node* head, int x, int data) {
if ( ! head)
return head;
if ( head-> data== x) {
node* tmp= createNode( data) ;
tmp-> nxt= head;
return head= tmp;
}
node* tmp= head;
while ( tmp-> nxt && tmp-> nxt-> data!= x)
tmp= tmp-> nxt;
if ( tmp-> nxt)
{
node* tmp2= createNode( data) ;
tmp2-> nxt= tmp-> nxt;
tmp-> nxt= tmp2;
}
return head;
}
node* deleteNode( node* head, int x) {
if ( ! head)
return head;
node * tmp= head;
if ( head-> data== x)
{
head= head-> nxt;
return head;
}
while ( tmp-> nxt && tmp-> nxt-> data!= x)
tmp= tmp-> nxt;
if ( tmp-> nxt)
{
node* tmp2= tmp-> nxt;
tmp-> nxt= tmp2-> nxt;
}
return head;
}
void display( node * head) {
node * tmp= head;
while ( tmp) {
tmp= tmp-> nxt;
}
}
int nbElemets( node * head) {
int nb= 0 ;
node * tmp= head;
while ( tmp) {
nb++;
tmp= tmp-> nxt;
}
return nb;
}
node* nthElement( node * head, int n) {
if ( nbElemets( head) < n|| n<= 0 )
return NULL;
node* p1, * p2;
p1= p2= head;
while ( n) {
p1= p1-> nxt;
n--;
}
while ( p1) {
p1= p1-> nxt;
p2= p2-> nxt;
}
return p2;
}
node * deleteLast( node * head, int x) {
node * tmp= head;
node * cur= NULL;
node * el = NULL;
if ( ! head)
return head;
while ( tmp) {
if ( tmp-> data== x) {
cur= tmp;
}
tmp= tmp-> nxt;
}
if ( ! cur)
return head;
if ( cur== head)
{
head= head-> nxt;
return head;
}
tmp= head;
while ( tmp-> nxt!= cur) {
tmp= tmp-> nxt;
}
el= tmp-> nxt;
tmp-> nxt= el-> nxt;
return head;
}
int main( int argc, char const * argv[ ] )
{
int n= 10 , pos;
node * head= NULL;
while ( n) {
head= addHead( head, n) ;
n--;
}
display( head) ;
head= addTail( head, 42 ) ;
printf ( "After adding 42 to the tail\n " ) ; display( head) ;
head= addBefore( head, 1 , 0 ) ;
head= addBefore( head, 5 , 67 ) ;
printf ( "After adding before 1 and 5 to the tail\n " ) ; display( head) ;
head= deleteNode( head, 6 ) ;
head= deleteNode( head, 0 ) ;
head= deleteNode( head, 10 ) ;
printf ( "After deleting some elements from the linked list\n " ) ; display( head) ;
printf ( "the number of elements is: %d\n " , nbElemets
( head
) ) ;
//printf("Donnez la position de l element a rechercher depuis la fin");
//scanf("%d",&pos);
pos= 4 ;
node * nth= nthElement( head, pos) ;
if ( nth) {
printf ( "the %d elelemt from tail is: %d" , pos
, nth
-> data
) ; }
else
printf ( "No %d th elelemt from tail " , pos
) ; head= addBefore( head, 42 , 9 ) ;
head= addBefore( head, 42 , 1 ) ;
display( head) ;
head= deleteLast( head, 42 ) ;
display( head) ;
return 0 ;
}
I2luY2x1ZGU8c3RkaW8uaD4KI2luY2x1ZGU8c3RkbGliLmg+CnR5cGVkZWYgc3RydWN0IG5vZGV7CglpbnQgZGF0YTsKCXN0cnVjdCBub2RlICpueHQ7Cn1ub2RlOwoKbm9kZSogY3JlYXRlTm9kZShpbnQgZGF0YSl7Cglub2RlICp0bXA9KG5vZGUqKW1hbGxvYyhzaXplb2Yobm9kZSkpOwoJdG1wLT5kYXRhPWRhdGE7Cgl0bXAtPm54dD1OVUxMOwoJcmV0dXJuIHRtcDsKfQpub2RlKiBhZGRIZWFkKG5vZGUgKiBoZWFkLCBpbnQgZGF0YSl7CglpZighaGVhZCkKCXJldHVybiBoZWFkPWNyZWF0ZU5vZGUoZGF0YSk7Cglub2RlICp0bXA9Y3JlYXRlTm9kZShkYXRhKTsKCXRtcC0+bnh0PWhlYWQ7CglyZXR1cm4gaGVhZD10bXA7Cn0Kbm9kZSAqYWRkVGFpbChub2RlKmhlYWQsIGludCBkYXRhKXsKCWlmKCFoZWFkKQoJCXJldHVybiBoZWFkPWNyZWF0ZU5vZGUoZGF0YSk7Cglub2RlKnRtcD1oZWFkOwoJd2hpbGUodG1wLT5ueHQpCgkJdG1wPXRtcC0+bnh0OwoJdG1wLT5ueHQ9Y3JlYXRlTm9kZShkYXRhKTsKCXJldHVybiBoZWFkOwp9Cm5vZGUqIGFkZEJlZm9yZShub2RlKiBoZWFkLCBpbnQgeCwgaW50IGRhdGEpewoJaWYoIWhlYWQpCgkJcmV0dXJuIGhlYWQ7CglpZihoZWFkLT5kYXRhPT14KXsKCQlub2RlKnRtcD1jcmVhdGVOb2RlKGRhdGEpOwoJCXRtcC0+bnh0PWhlYWQ7CgkJcmV0dXJuIGhlYWQ9dG1wOwoJfQoJbm9kZSp0bXA9aGVhZDsKCXdoaWxlKHRtcC0+bnh0ICYmIHRtcC0+bnh0LT5kYXRhIT14KQoJCXRtcD10bXAtPm54dDsKCWlmKHRtcC0+bnh0KQoJewoJCW5vZGUqIHRtcDI9Y3JlYXRlTm9kZShkYXRhKTsKCQl0bXAyLT5ueHQ9dG1wLT5ueHQ7CgkJdG1wLT5ueHQ9dG1wMjsKCX0KCXJldHVybiBoZWFkOwoKfQoKbm9kZSogZGVsZXRlTm9kZShub2RlKiBoZWFkLCBpbnQgeCl7CglpZighaGVhZCkKCQlyZXR1cm4gaGVhZDsKCW5vZGUgKnRtcD1oZWFkOwoJaWYgKGhlYWQtPmRhdGE9PXgpCgl7CgkJaGVhZD1oZWFkLT5ueHQ7CgkJZnJlZSh0bXApOwoJCXJldHVybiBoZWFkOwoJfQoJd2hpbGUodG1wLT5ueHQgJiYgdG1wLT5ueHQtPmRhdGEhPXgpCgkJdG1wPXRtcC0+bnh0OwoJaWYodG1wLT5ueHQpCgl7CgkJbm9kZSogdG1wMj10bXAtPm54dDsKCQl0bXAtPm54dD10bXAyLT5ueHQ7CgkJZnJlZSh0bXAyKTsKCX0KCXJldHVybiBoZWFkOwp9CnZvaWQgZGlzcGxheShub2RlICogaGVhZCl7Cglub2RlICp0bXA9aGVhZDsKCXdoaWxlKHRtcCl7CgkJcHJpbnRmKCIlZFx0IiwgdG1wLT5kYXRhKTsKCQl0bXA9dG1wLT5ueHQ7Cgl9Cn0KaW50IG5iRWxlbWV0cyhub2RlICpoZWFkKXsKCWludCBuYj0wOwoJbm9kZSAqdG1wPWhlYWQ7Cgl3aGlsZSh0bXApewoJCW5iKys7CgkJdG1wPXRtcC0+bnh0OwoJfQoJcmV0dXJuIG5iOwp9Cm5vZGUqIG50aEVsZW1lbnQobm9kZSAqaGVhZCwgaW50IG4pewoJaWYobmJFbGVtZXRzKGhlYWQpPG58fG48PTApCgkJcmV0dXJuIE5VTEw7Cglub2RlKiBwMSwgKnAyOwoJcDE9cDI9aGVhZDsKCXdoaWxlKG4pewoJCXAxPXAxLT5ueHQ7CgkJbi0tOwoJfQoJd2hpbGUocDEpewoJCXAxPXAxLT5ueHQ7CgkJcDI9cDItPm54dDsKCX0KCXJldHVybiBwMjsKfQpub2RlICogZGVsZXRlTGFzdChub2RlICpoZWFkLCBpbnQgeCl7Cglub2RlICogdG1wPWhlYWQ7Cglub2RlICpjdXI9TlVMTDsKCW5vZGUgKmVsID1OVUxMOwoJaWYoIWhlYWQpCgkJcmV0dXJuIGhlYWQ7Cgl3aGlsZSh0bXApewoJCWlmKHRtcC0+ZGF0YT09eCl7CgkJCWN1cj10bXA7CgkJfQoJCXRtcD10bXAtPm54dDsKCX0KCWlmKCFjdXIpCgkJcmV0dXJuIGhlYWQ7CglpZihjdXI9PWhlYWQpCgl7CgkJaGVhZD1oZWFkLT5ueHQ7CgkJZnJlZShjdXIpOwoJCXJldHVybiBoZWFkOwoJfQoJdG1wPWhlYWQ7Cgl3aGlsZSh0bXAtPm54dCE9Y3VyKXsKCQl0bXA9dG1wLT5ueHQ7Cgl9CgllbD10bXAtPm54dDsKCXRtcC0+bnh0PWVsLT5ueHQ7CglmcmVlKGVsKTsKCXJldHVybiBoZWFkOwoKfQoKaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgY29uc3QgKmFyZ3ZbXSkKewoJaW50IG49MTAsIHBvczsKCW5vZGUgKiBoZWFkPU5VTEw7Cgl3aGlsZShuKXsKCQloZWFkPWFkZEhlYWQoaGVhZCwgbik7CgkJbi0tOwoJfQoJZGlzcGxheShoZWFkKTsKCXByaW50ZigiXG4iKTsKCWhlYWQ9YWRkVGFpbChoZWFkLCA0Mik7CglwcmludGYoIkFmdGVyIGFkZGluZyA0MiB0byB0aGUgdGFpbFxuIik7CglkaXNwbGF5KGhlYWQpOwoJcHJpbnRmKCJcbiIpOwoJaGVhZD1hZGRCZWZvcmUoaGVhZCwxLDApOwoJaGVhZD1hZGRCZWZvcmUoaGVhZCw1LDY3KTsKCXByaW50ZigiQWZ0ZXIgYWRkaW5nIGJlZm9yZSAxIGFuZCA1IHRvIHRoZSB0YWlsXG4iKTsKCWRpc3BsYXkoaGVhZCk7CglwcmludGYoIlxuIik7CgloZWFkPWRlbGV0ZU5vZGUoaGVhZCwgNik7CgloZWFkPWRlbGV0ZU5vZGUoaGVhZCwgMCk7CgloZWFkPWRlbGV0ZU5vZGUoaGVhZCwgMTApOwoJcHJpbnRmKCJBZnRlciBkZWxldGluZyBzb21lIGVsZW1lbnRzIGZyb20gdGhlIGxpbmtlZCBsaXN0XG4iKTsKCWRpc3BsYXkoaGVhZCk7CglwcmludGYoIlxuIik7CgoJcHJpbnRmKCJ0aGUgbnVtYmVyIG9mIGVsZW1lbnRzIGlzOiAlZFxuIixuYkVsZW1ldHMoaGVhZCkpOwoKCS8vcHJpbnRmKCJEb25uZXogbGEgcG9zaXRpb24gZGUgbCBlbGVtZW50IGEgcmVjaGVyY2hlciBkZXB1aXMgbGEgZmluIik7CgkvL3NjYW5mKCIlZCIsJnBvcyk7Cglwb3M9NDsKCW5vZGUgKiBudGg9bnRoRWxlbWVudChoZWFkLCBwb3MpOwoJcHJpbnRmKCJcbiIpOwoJaWYobnRoKXsKCQlwcmludGYoInRoZSAlZCBlbGVsZW10IGZyb20gdGFpbCBpczogJWQiLHBvcywgbnRoLT5kYXRhKTsKCX0KCWVsc2UKCQlwcmludGYoIk5vICVkIHRoIGVsZWxlbXQgZnJvbSB0YWlsICIscG9zKTsKCQlwcmludGYoIlxuIik7CgkJaGVhZD1hZGRCZWZvcmUoaGVhZCw0Miw5KTsKCQloZWFkPWFkZEJlZm9yZShoZWFkLDQyLDEpOwoJCQlkaXNwbGF5KGhlYWQpOwoJcHJpbnRmKCJcbiIpOwoJaGVhZD1kZWxldGVMYXN0KGhlYWQsNDIpOwoJcHJpbnRmKCJcbiIpOwoJCQkJZGlzcGxheShoZWFkKTsKCXByaW50ZigiXG4iKTsKCglyZXR1cm4gMDsKfQoKCgoKCgoKCgoKCgoKCgoKCgoKCgo=