#include <stdio.h> 
#include <stdlib.h> 
 
struct  node { 
	int  value; 
	struct  node*  next; 
} ; 
typedef  struct  node node_t; 
 
node_t*  create_linked_list( unsigned  int  number_of_nodes)  { 
	node_t*  head =  NULL; 
 
	for  ( unsigned  int  i =  1 ;  i <  number_of_nodes +  1 ;  ++ i)  { 
		/* 
		 * malloc might be necessary so that the node doesn't 
		 * get wiped from memory once the for loop is over? 
		 * TODO: Find out if that is why it's necessary. 
		*/ 
		node_t
*  node 
=  malloc ( sizeof ( node_t
) ) ; 		node-> value =  i; 
		node-> next =  head; 
		head =  node; 
	} 
 
	return  head; 
} 
 
void  print_list( node_t*  head)  { 
	node_t*  temp =  head; 
 
	while  ( temp !=  NULL)  { 
		temp =  temp-> next; 
	} 
 
} 
 
void  clean_list( node_t*  head)  { 
	node_t*  current =  head; 
 
	while  ( current !=  NULL)  { 
		node_t*  temp =  current; 
		current =  current-> next; 
	} 
 
	printf ( "\n clean_list complete \n " ) ;  } 
 
int  main( void )  { 
	node_t*  head =  create_linked_list( 15 ) ; 
 
	printf ( "head address at beginning = %p\n " ,  head
) ;  	printf ( "head value at the beginning = %d\n \n " ,  ( * head
) .
value ) ;   
	print_list( head) ; 
 
	clean_list( head) ; 
 
	printf ( "\n head address at the end = %p" ,  head
) ;  	printf ( "\n head value at the end = %d" ,  ( * head
) .
value ) ;   
	return  0 ; 
} 
 
I2luY2x1ZGUgPHN0ZGlvLmg+CiNpbmNsdWRlIDxzdGRsaWIuaD4KCnN0cnVjdCBub2RlIHsKCWludCB2YWx1ZTsKCXN0cnVjdCBub2RlKiBuZXh0Owp9Owp0eXBlZGVmIHN0cnVjdCBub2RlIG5vZGVfdDsKCm5vZGVfdCogY3JlYXRlX2xpbmtlZF9saXN0KHVuc2lnbmVkIGludCBudW1iZXJfb2Zfbm9kZXMpIHsKCW5vZGVfdCogaGVhZCA9IE5VTEw7CgkKCWZvciAodW5zaWduZWQgaW50IGkgPSAxOyBpIDwgbnVtYmVyX29mX25vZGVzICsgMTsgKytpKSB7CgkJLyoKCQkgKiBtYWxsb2MgbWlnaHQgYmUgbmVjZXNzYXJ5IHNvIHRoYXQgdGhlIG5vZGUgZG9lc24ndAoJCSAqIGdldCB3aXBlZCBmcm9tIG1lbW9yeSBvbmNlIHRoZSBmb3IgbG9vcCBpcyBvdmVyPwoJCSAqIFRPRE86IEZpbmQgb3V0IGlmIHRoYXQgaXMgd2h5IGl0J3MgbmVjZXNzYXJ5LgoJCSovCgkJbm9kZV90KiBub2RlID0gbWFsbG9jKHNpemVvZihub2RlX3QpKTsKCQlub2RlLT52YWx1ZSA9IGk7CgkJbm9kZS0+bmV4dCA9IGhlYWQ7CgkJaGVhZCA9IG5vZGU7Cgl9CgoJcmV0dXJuIGhlYWQ7Cn0KCnZvaWQgcHJpbnRfbGlzdChub2RlX3QqIGhlYWQpIHsKCW5vZGVfdCogdGVtcCA9IGhlYWQ7CgkKCXdoaWxlICh0ZW1wICE9IE5VTEwpIHsKCQlwcmludGYoIiVkIC0gIiwgdGVtcC0+dmFsdWUpOwoJCXRlbXAgPSB0ZW1wLT5uZXh0OwoJfQoKCXByaW50ZigiXG4iKTsKfQoKdm9pZCBjbGVhbl9saXN0KG5vZGVfdCogaGVhZCkgewoJbm9kZV90KiBjdXJyZW50ID0gaGVhZDsKCQoJd2hpbGUgKGN1cnJlbnQgIT0gTlVMTCkgewoJCW5vZGVfdCogdGVtcCA9IGN1cnJlbnQ7CgkJY3VycmVudCA9IGN1cnJlbnQtPm5leHQ7CgkJZnJlZSh0ZW1wKTsKCX0KCQoJcHJpbnRmKCJcbmNsZWFuX2xpc3QgY29tcGxldGUgXG4iKTsKfQoKaW50IG1haW4odm9pZCkgewoJbm9kZV90KiBoZWFkID0gY3JlYXRlX2xpbmtlZF9saXN0KDE1KTsKCQoJcHJpbnRmKCJoZWFkIGFkZHJlc3MgYXQgYmVnaW5uaW5nID0gJXBcbiIsIGhlYWQpOwoJcHJpbnRmKCJoZWFkIHZhbHVlIGF0IHRoZSBiZWdpbm5pbmcgPSAlZFxuXG4iLCAoKmhlYWQpLnZhbHVlKTsKCQoJcHJpbnRfbGlzdChoZWFkKTsKCQoJY2xlYW5fbGlzdChoZWFkKTsKCQoJcHJpbnRmKCJcbmhlYWQgYWRkcmVzcyBhdCB0aGUgZW5kID0gJXAiLCBoZWFkKTsKCXByaW50ZigiXG5oZWFkIHZhbHVlIGF0IHRoZSBlbmQgPSAlZCIsICgqaGVhZCkudmFsdWUpOwoJCglyZXR1cm4gMDsKfQo=