#include <stdlib.h> //NULL, malloc
#include <stdio.h> //printf
#include <assert.h> //assert
typedef struct Node {
int val;
struct Node* next;
} node;
node* make_ll( int len) {
node head; // Code only populates the next field.
head.next = NULL;
node* cur = & head;
for ( int i = 0 ; i < len; i++ ) {
cur
-> next
= malloc ( sizeof * ( cur
-> next
) ) ; cur = cur-> next;
cur-> val = i;
cur-> next = NULL;
}
return head.next ;
}
void print_ll( const node* head) {
const node* cur = head;
while ( cur != NULL) {
printf ( "Node %d @ %p points to %p as next\n " , cur-> val, ( const void * ) cur, ( void * ) cur-> next) ;
cur = cur-> next;
}
}
int main( ) {
node* ll = make_ll( 4 ) ;
print_ll( ll) ;
}
I2luY2x1ZGUgPHN0ZGxpYi5oPiAgICAgLy9OVUxMLCBtYWxsb2MKI2luY2x1ZGUgPHN0ZGlvLmg+ICAgICAgLy9wcmludGYKI2luY2x1ZGUgPGFzc2VydC5oPiAgICAgLy9hc3NlcnQKCnR5cGVkZWYgc3RydWN0IE5vZGUgewogICAgaW50IHZhbDsKICAgIHN0cnVjdCBOb2RlKiBuZXh0Owp9IG5vZGU7Cgpub2RlKiBtYWtlX2xsKGludCBsZW4pewogICAgbm9kZSBoZWFkOyAgLy8gQ29kZSBvbmx5IHBvcHVsYXRlcyB0aGUgbmV4dCBmaWVsZC4KICAgIGhlYWQubmV4dCA9IE5VTEw7CiAgICBub2RlKiBjdXIgPSAmaGVhZDsKICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbGVuOyBpKyspIHsKICAgICAgICBjdXItPm5leHQgPSBtYWxsb2Moc2l6ZW9mICooY3VyLT5uZXh0KSk7CiAgICAgICAgYXNzZXJ0KGN1ci0+bmV4dCk7CiAgICAgICAgY3VyID0gY3VyLT5uZXh0OwogICAgICAgIGN1ci0+dmFsID0gaTsKICAgICAgICBjdXItPm5leHQgPSBOVUxMOwogICAgfQogICAgcmV0dXJuIGhlYWQubmV4dDsKfQoKdm9pZCBwcmludF9sbChjb25zdCBub2RlKiBoZWFkKXsKICAgIGNvbnN0IG5vZGUqIGN1ciA9IGhlYWQ7CiAgICB3aGlsZSAoY3VyICE9IE5VTEwpIHsKICAgICAgICBwcmludGYoIk5vZGUgJWQgQCAlcCBwb2ludHMgdG8gJXAgYXMgbmV4dFxuIiwKICAgICAgICAgICAgICAgIGN1ci0+dmFsLCAoY29uc3Qgdm9pZCAqKSBjdXIsICh2b2lkICopIGN1ci0+bmV4dCk7CiAgICAgICAgY3VyID0gY3VyLT5uZXh0OwogICAgfQp9CgppbnQgbWFpbigpewogICAgbm9kZSogbGwgPSBtYWtlX2xsKDQpOwogICAgcHJpbnRfbGwobGwpOwogICAgZnJlZShsbCk7Cn0=