#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
typedef struct node {
int value;
struct node * next;
} NODE;
void nodecreate( struct node * tail, int n ) {
tail
->next
= malloc( sizeof * tail
->next
); tail->next->value = n;
tail->next->next = NULL;
}
struct node * listappend( struct node * list, int n ) {
struct node * tail = list;
while ( tail->next != NULL ) {
tail = tail->next;
}
nodecreate( tail, n );
return list;
}
void listprint( struct node * list ) {
int i = 0;
while ( list != NULL ) {
printf( "%d: %d\n", i
, list
->value
); i++;
list = list->next;
}
}
struct node * listdelete( struct node * list, int n ) {
if ( list == NULL )
return list;
struct node * caret = list;
if ( list->value == n ) {
list = list->next;
}
else {
while ( caret->next != NULL && caret->next->value != n ) {
caret = caret->next;
}
while ( caret->next->next != NULL ) {
caret->next->value = caret->next->next->value;
caret = caret->next;
}
caret->next = NULL;
}
return list;
}
int main( ) {
struct node list = {
.value = 0,
.next = NULL
};
for ( int i = 1; i < 5; i++ ) {
listappend( &list, i * 100 );
}
listprint( &list );
listdelete( &list, 200 );
listprint( &list );
return 0;
}
I2RlZmluZSBfQ1JUX1NFQ1VSRV9OT19XQVJOSU5HUwojaW5jbHVkZSA8c3RkaW8uaD4KI2luY2x1ZGUgPHN0ZGxpYi5oPgoKdHlwZWRlZiBzdHJ1Y3Qgbm9kZSB7CglpbnQgdmFsdWU7CglzdHJ1Y3Qgbm9kZSAqIG5leHQ7Cn0gTk9ERTsKCnZvaWQgbm9kZWNyZWF0ZSggc3RydWN0IG5vZGUgKiB0YWlsLCBpbnQgbiApIHsKCXRhaWwtPm5leHQgPSBtYWxsb2MoIHNpemVvZiAqIHRhaWwtPm5leHQgKTsKCXRhaWwtPm5leHQtPnZhbHVlID0gbjsKCXRhaWwtPm5leHQtPm5leHQgPSBOVUxMOwp9CgpzdHJ1Y3Qgbm9kZSAqIGxpc3RhcHBlbmQoIHN0cnVjdCBub2RlICogbGlzdCwgaW50IG4gKSB7CglzdHJ1Y3Qgbm9kZSAqIHRhaWwgPSBsaXN0OwoJd2hpbGUgKCB0YWlsLT5uZXh0ICE9IE5VTEwgKSB7CgkJdGFpbCA9IHRhaWwtPm5leHQ7Cgl9Cglub2RlY3JlYXRlKCB0YWlsLCBuICk7CglyZXR1cm4gbGlzdDsKfQoKdm9pZCBsaXN0cHJpbnQoIHN0cnVjdCBub2RlICogbGlzdCApIHsKCWludCBpID0gMDsKCXdoaWxlICggbGlzdCAhPSBOVUxMICkgewoJCXByaW50ZiggIiVkOiAlZFxuIiwgaSwgbGlzdC0+dmFsdWUgKTsKCQlpKys7CgkJbGlzdCA9IGxpc3QtPm5leHQ7Cgl9Cn0KCnN0cnVjdCBub2RlICogbGlzdGRlbGV0ZSggc3RydWN0IG5vZGUgKiBsaXN0LCBpbnQgbiApIHsKCWlmICggbGlzdCA9PSBOVUxMICkKCQlyZXR1cm4gbGlzdDsKCglzdHJ1Y3Qgbm9kZSAqIGNhcmV0ID0gbGlzdDsKCWlmICggbGlzdC0+dmFsdWUgPT0gbiApIHsKCQlsaXN0ID0gbGlzdC0+bmV4dDsKCQlmcmVlKCBjYXJldCApOwoJfQoJZWxzZSB7CgkJd2hpbGUgKCBjYXJldC0+bmV4dCAhPSBOVUxMICYmIGNhcmV0LT5uZXh0LT52YWx1ZSAhPSBuICkgewoJCQljYXJldCA9IGNhcmV0LT5uZXh0OwoJCX0KCQl3aGlsZSAoIGNhcmV0LT5uZXh0LT5uZXh0ICE9IE5VTEwgKSB7CgkJCWNhcmV0LT5uZXh0LT52YWx1ZSA9IGNhcmV0LT5uZXh0LT5uZXh0LT52YWx1ZTsKCQkJY2FyZXQgPSBjYXJldC0+bmV4dDsKCQl9CgkJZnJlZSggY2FyZXQtPm5leHQgKTsKCQljYXJldC0+bmV4dCA9IE5VTEw7Cgl9CgoJcmV0dXJuIGxpc3Q7Cn0KCmludCBtYWluKCApIHsKCXN0cnVjdCBub2RlIGxpc3QgPSB7CgkJLnZhbHVlID0gMCwKCQkubmV4dCA9IE5VTEwKCX07CgoJZm9yICggaW50IGkgPSAxOyBpIDwgNTsgaSsrICkgewoJCWxpc3RhcHBlbmQoICZsaXN0LCBpICogMTAwICk7Cgl9CgoJbGlzdHByaW50KCAmbGlzdCApOwoJbGlzdGRlbGV0ZSggJmxpc3QsIDIwMCApOwoJbGlzdHByaW50KCAmbGlzdCApOwoKCXJldHVybiAwOwp9