#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;
}
int main( int argc, char const * argv[ ] )
{
int n= 10 ;
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
) ) ; return 0 ;
}
I2luY2x1ZGU8c3RkaW8uaD4KI2luY2x1ZGU8c3RkbGliLmg+CnR5cGVkZWYgc3RydWN0IG5vZGV7CglpbnQgZGF0YTsKCXN0cnVjdCBub2RlICpueHQ7Cn1ub2RlOwoKbm9kZSogY3JlYXRlTm9kZShpbnQgZGF0YSl7Cglub2RlICp0bXA9KG5vZGUqKW1hbGxvYyhzaXplb2Yobm9kZSkpOwoJdG1wLT5kYXRhPWRhdGE7Cgl0bXAtPm54dD1OVUxMOwoJcmV0dXJuIHRtcDsKfQpub2RlKiBhZGRIZWFkKG5vZGUgKiBoZWFkLCBpbnQgZGF0YSl7CglpZighaGVhZCkKCXJldHVybiBoZWFkPWNyZWF0ZU5vZGUoZGF0YSk7Cglub2RlICp0bXA9Y3JlYXRlTm9kZShkYXRhKTsKCXRtcC0+bnh0PWhlYWQ7CglyZXR1cm4gaGVhZD10bXA7Cn0Kbm9kZSAqYWRkVGFpbChub2RlKmhlYWQsIGludCBkYXRhKXsKCWlmKCFoZWFkKQoJCXJldHVybiBoZWFkPWNyZWF0ZU5vZGUoZGF0YSk7Cglub2RlKnRtcD1oZWFkOwoJd2hpbGUodG1wLT5ueHQpCgkJdG1wPXRtcC0+bnh0OwoJdG1wLT5ueHQ9Y3JlYXRlTm9kZShkYXRhKTsKCXJldHVybiBoZWFkOwp9Cm5vZGUqIGFkZEJlZm9yZShub2RlKiBoZWFkLCBpbnQgeCwgaW50IGRhdGEpewoJaWYoIWhlYWQpCgkJcmV0dXJuIGhlYWQ7CglpZihoZWFkLT5kYXRhPT14KXsKCQlub2RlKnRtcD1jcmVhdGVOb2RlKGRhdGEpOwoJCXRtcC0+bnh0PWhlYWQ7CgkJcmV0dXJuIGhlYWQ9dG1wOwoJfQoJbm9kZSp0bXA9aGVhZDsKCXdoaWxlKHRtcC0+bnh0ICYmIHRtcC0+bnh0LT5kYXRhIT14KQoJCXRtcD10bXAtPm54dDsKCWlmKHRtcC0+bnh0KQoJewoJCW5vZGUqIHRtcDI9Y3JlYXRlTm9kZShkYXRhKTsKCQl0bXAyLT5ueHQ9dG1wLT5ueHQ7CgkJdG1wLT5ueHQ9dG1wMjsKCX0KCXJldHVybiBoZWFkOwoKfQoKbm9kZSogZGVsZXRlTm9kZShub2RlKiBoZWFkLCBpbnQgeCl7CglpZighaGVhZCkKCQlyZXR1cm4gaGVhZDsKCW5vZGUgKnRtcD1oZWFkOwoJaWYgKGhlYWQtPmRhdGE9PXgpCgl7CgkJaGVhZD1oZWFkLT5ueHQ7CgkJZnJlZSh0bXApOwoJCXJldHVybiBoZWFkOwoJfQoJd2hpbGUodG1wLT5ueHQgJiYgdG1wLT5ueHQtPmRhdGEhPXgpCgkJdG1wPXRtcC0+bnh0OwoJaWYodG1wLT5ueHQpCgl7CgkJbm9kZSogdG1wMj10bXAtPm54dDsKCQl0bXAtPm54dD10bXAyLT5ueHQ7CgkJZnJlZSh0bXAyKTsKCX0KCXJldHVybiBoZWFkOwp9CnZvaWQgZGlzcGxheShub2RlICogaGVhZCl7Cglub2RlICp0bXA9aGVhZDsKCXdoaWxlKHRtcCl7CgkJcHJpbnRmKCIlZFx0IiwgdG1wLT5kYXRhKTsKCQl0bXA9dG1wLT5ueHQ7Cgl9Cn0KaW50IG5iRWxlbWV0cyhub2RlICpoZWFkKXsKCWludCBuYj0wOwoJbm9kZSAqdG1wPWhlYWQ7Cgl3aGlsZSh0bXApewoJCW5iKys7CgkJdG1wPXRtcC0+bnh0OwoJfQoJcmV0dXJuIG5iOwp9CgppbnQgbWFpbihpbnQgYXJnYywgY2hhciBjb25zdCAqYXJndltdKQp7CglpbnQgbj0xMDsKCW5vZGUgKiBoZWFkPU5VTEw7Cgl3aGlsZShuKXsKCQloZWFkPWFkZEhlYWQoaGVhZCwgbik7CgkJbi0tOwoJfQoJZGlzcGxheShoZWFkKTsKCXByaW50ZigiXG4iKTsKCWhlYWQ9YWRkVGFpbChoZWFkLCA0Mik7CglwcmludGYoIkFmdGVyIGFkZGluZyA0MiB0byB0aGUgdGFpbFxuIik7CglkaXNwbGF5KGhlYWQpOwoJcHJpbnRmKCJcbiIpOwoJaGVhZD1hZGRCZWZvcmUoaGVhZCwxLDApOwoJaGVhZD1hZGRCZWZvcmUoaGVhZCw1LDY3KTsKCXByaW50ZigiQWZ0ZXIgYWRkaW5nIGJlZm9yZSAxIGFuZCA1IHRvIHRoZSB0YWlsXG4iKTsKCWRpc3BsYXkoaGVhZCk7CglwcmludGYoIlxuIik7CgloZWFkPWRlbGV0ZU5vZGUoaGVhZCwgNik7CgloZWFkPWRlbGV0ZU5vZGUoaGVhZCwgMCk7CgloZWFkPWRlbGV0ZU5vZGUoaGVhZCwgMTApOwoJcHJpbnRmKCJBZnRlciBkZWxldGluZyBzb21lIGVsZW1lbnRzIGZyb20gdGhlIGxpbmtlZCBsaXN0XG4iKTsKCWRpc3BsYXkoaGVhZCk7CglwcmludGYoIlxuIik7CgoJcHJpbnRmKCJ0aGUgbnVtYmVyIG9mIGVsZW1lbnRzIGlzOiAlZFxuIixuYkVsZW1ldHMoaGVhZCkpOwoJcmV0dXJuIDA7Cn0KCgoKCgoKCgoKCgoKCgoKCgoKCgoK