#include <stdio.h>
#include <stdlib.h>
typedef struct Node {
int value;
struct Node *next;
} Node;
// Поиск узла по значению.
// Возвращает найденный узел, а через prev записывает предыдущий.
Node *find_node(Node *head, int value, Node **prev){
Node *current = head;
*prev = NULL;
while (current != NULL) {
if (current->value == value) {
return current;
}
*prev = current;
current = current->next;
}
return NULL;
}
// Удаление узла из односвязного списка.
void remove_node(Node **head, Node *node, Node *prev){
if (node == NULL) {
return;
}
if (prev == NULL) {
// Удаляем первый узел
*head = node->next;
} else {
// Перепрыгиваем через удаляемый узел
prev->next = node->next;
}
}
int main(void){
Node
*head
= malloc(sizeof(Node
)); Node
*second
= malloc(sizeof(Node
)); Node
*third
= malloc(sizeof(Node
));
head->value = 10;
head->next = second;
second->value = 20;
second->next = third;
third->value = 30;
third->next = NULL;
// Создаём новый узел
Node
*new_node
= malloc(sizeof(Node
)); new_node->value = 25;
// Вставляем его между second и third
new_node->next = second->next;
second->next = new_node;
// Удаление из середины
// находим узел 20
Node *prev = NULL;
Node *node = find_node(head, 20, &prev);
// удаляем найденный узел
if (node != NULL) {
remove_node(&head, node, prev);
}
// Проходим по списку
Node *current = head;
while (current != NULL) {
printf("%d\n", current
->value
);// 10 25 30 current = current->next;
}
// Освобождаем оставшиеся узлы
current = head;
while (current != NULL) {
Node *next = current->next;
current = next;
}
return 0;
}
I2luY2x1ZGUgPHN0ZGlvLmg+CiNpbmNsdWRlIDxzdGRsaWIuaD4KCnR5cGVkZWYgc3RydWN0IE5vZGUgewogICAgaW50IHZhbHVlOwogICAgc3RydWN0IE5vZGUgKm5leHQ7Cn0gTm9kZTsKCgovLyDQn9C+0LjRgdC6INGD0LfQu9CwINC/0L4g0LfQvdCw0YfQtdC90LjRji4KLy8g0JLQvtC30LLRgNCw0YnQsNC10YIg0L3QsNC50LTQtdC90L3Ri9C5INGD0LfQtdC7LCDQsCDRh9C10YDQtdC3IHByZXYg0LfQsNC/0LjRgdGL0LLQsNC10YIg0L/RgNC10LTRi9C00YPRidC40LkuCk5vZGUgKmZpbmRfbm9kZShOb2RlICpoZWFkLCBpbnQgdmFsdWUsIE5vZGUgKipwcmV2KXsKICAgIE5vZGUgKmN1cnJlbnQgPSBoZWFkOwogICAgKnByZXYgPSBOVUxMOwogICAgd2hpbGUgKGN1cnJlbnQgIT0gTlVMTCkgewogICAgICAgIGlmIChjdXJyZW50LT52YWx1ZSA9PSB2YWx1ZSkgewogICAgICAgICAgICByZXR1cm4gY3VycmVudDsKICAgICAgICB9CiAgICAgICAgKnByZXYgPSBjdXJyZW50OwogICAgICAgIGN1cnJlbnQgPSBjdXJyZW50LT5uZXh0OwogICAgfQogICAgcmV0dXJuIE5VTEw7Cn0KCi8vINCj0LTQsNC70LXQvdC40LUg0YPQt9C70LAg0LjQtyDQvtC00L3QvtGB0LLRj9C30L3QvtCz0L4g0YHQv9C40YHQutCwLgp2b2lkIHJlbW92ZV9ub2RlKE5vZGUgKipoZWFkLCBOb2RlICpub2RlLCBOb2RlICpwcmV2KXsKICAgIGlmIChub2RlID09IE5VTEwpIHsKICAgICAgICByZXR1cm47CiAgICB9CiAgICBpZiAocHJldiA9PSBOVUxMKSB7CiAgICAgICAgLy8g0KPQtNCw0LvRj9C10Lwg0L/QtdGA0LLRi9C5INGD0LfQtdC7CiAgICAgICAgKmhlYWQgPSBub2RlLT5uZXh0OwogICAgfSBlbHNlIHsKICAgICAgICAvLyDQn9C10YDQtdC/0YDRi9Cz0LjQstCw0LXQvCDRh9C10YDQtdC3INGD0LTQsNC70Y/QtdC80YvQuSDRg9C30LXQuwogICAgICAgIHByZXYtPm5leHQgPSBub2RlLT5uZXh0OwogICAgfQogICAgZnJlZShub2RlKTsKfQoKaW50IG1haW4odm9pZCl7CiAgICBOb2RlICpoZWFkID0gbWFsbG9jKHNpemVvZihOb2RlKSk7CiAgICBOb2RlICpzZWNvbmQgPSBtYWxsb2Moc2l6ZW9mKE5vZGUpKTsKICAgIE5vZGUgKnRoaXJkID0gbWFsbG9jKHNpemVvZihOb2RlKSk7CgogICAgaGVhZC0+dmFsdWUgPSAxMDsKICAgIGhlYWQtPm5leHQgPSBzZWNvbmQ7CgogICAgc2Vjb25kLT52YWx1ZSA9IDIwOwogICAgc2Vjb25kLT5uZXh0ID0gdGhpcmQ7CgogICAgdGhpcmQtPnZhbHVlID0gMzA7CiAgICB0aGlyZC0+bmV4dCA9IE5VTEw7CgogICAgLy8g0KHQvtC30LTQsNGR0Lwg0L3QvtCy0YvQuSDRg9C30LXQuwogICAgTm9kZSAqbmV3X25vZGUgPSBtYWxsb2Moc2l6ZW9mKE5vZGUpKTsKICAgIG5ld19ub2RlLT52YWx1ZSA9IDI1OwogICAgLy8g0JLRgdGC0LDQstC70Y/QtdC8INC10LPQviDQvNC10LbQtNGDIHNlY29uZCDQuCB0aGlyZAogICAgbmV3X25vZGUtPm5leHQgPSBzZWNvbmQtPm5leHQ7CiAgICBzZWNvbmQtPm5leHQgPSBuZXdfbm9kZTsKCiAgICAvLyDQo9C00LDQu9C10L3QuNC1INC40Lcg0YHQtdGA0LXQtNC40L3RiwogICAgLy8gICDQvdCw0YXQvtC00LjQvCDRg9C30LXQuyAyMAogICAgTm9kZSAqcHJldiA9IE5VTEw7CiAgICBOb2RlICpub2RlID0gZmluZF9ub2RlKGhlYWQsIDIwLCAmcHJldik7CiAgICAvLyAgINGD0LTQsNC70Y/QtdC8INC90LDQudC00LXQvdC90YvQuSDRg9C30LXQuwogICAgaWYgKG5vZGUgIT0gTlVMTCkgewogICAgICAgIHJlbW92ZV9ub2RlKCZoZWFkLCBub2RlLCBwcmV2KTsKICAgIH0KCiAgICAvLyDQn9GA0L7RhdC+0LTQuNC8INC/0L4g0YHQv9C40YHQutGDCiAgICBOb2RlICpjdXJyZW50ID0gaGVhZDsKICAgIHdoaWxlIChjdXJyZW50ICE9IE5VTEwpIHsKICAgICAgICBwcmludGYoIiVkXG4iLCBjdXJyZW50LT52YWx1ZSk7Ly8gMTAgMjUgMzAKICAgICAgICBjdXJyZW50ID0gY3VycmVudC0+bmV4dDsKICAgIH0KCiAgICAvLyDQntGB0LLQvtCx0L7QttC00LDQtdC8INC+0YHRgtCw0LLRiNC40LXRgdGPINGD0LfQu9GLCiAgICBjdXJyZW50ID0gaGVhZDsKICAgIHdoaWxlIChjdXJyZW50ICE9IE5VTEwpIHsKICAgICAgICBOb2RlICpuZXh0ID0gY3VycmVudC0+bmV4dDsKICAgICAgICBmcmVlKGN1cnJlbnQpOwogICAgICAgIGN1cnJlbnQgPSBuZXh0OwogICAgfQoKICAgIHJldHVybiAwOwp9