Удаление элемента из односвязного списка - C (СИ) (77017)
Формулировка задачи:
помогите, пжлста, уже мучаюсь несколько дней, нужна незамысловатая функция,которая удаляет заданный элемент из односвязного списка
#include<stdlib.h> #include<stdio.h> struct list_el { int value; struct list_el * next; //ukazatelj na sledujuwij element }; typedef struct list_el item; //glavnaja 4astj int main() { item * curr, * head; //inicializacija elementov strukturi: tekuwij element i pervij element int i; int node_number; //izna4aljno pustoj spisok head = NULL; //sozdanie elementov spiska printf ("enter the number of nodes?"); scanf ("%d", &node_number); for(i=1;i<=node_number;i++) { curr = (item *)malloc(sizeof(item)); curr->value = i; //zadaem zna4enie dlja kawdogo elementa curr->next = head; //ukazivaem na na4alo spiska head = curr; } curr = head; struct list_el *search_list_el (struct list_el *head, int index) { struct list_el *curr; for (curr=head; curr!=NULL;curr=curr->next) if (curr->value==index) return curr; return NULL; } //udalenie elementov //vivod elementov while(curr) { printf("%d\n", curr->value); curr = curr->next ; } system("pause"); }
Решение задачи: «Удаление элемента из односвязного списка»
textual
Листинг программы
#include<stdlib.h> #include<stdio.h> ///// VARS ///// struct list_element { int value; struct list_element * next; }; typedef struct list_element item; ///// FUNCPROTS ///// item *create_list(void); int print_list(item *head); item *delete_value(item *head); ///// MAIN ///// int main(void) { item *head; head = create_list(); while(print_list(head)) { head = delete_value(head); } puts("Goodbye!"); return 0; } ///// FUNCTIONS /////// item *create_list(void) { int i; int node_number; item *curr, *head = NULL; printf ("enter the number of nodes?"); scanf ("%d", &node_number); for(i=1; i<=node_number; i++) { curr = (item *)malloc(sizeof(item)); curr->value = i; curr->next = head; head = curr; } return head; } int print_list(item *head) { int i = 0; item *curr = head; while(curr) { printf("%d\n", curr->value); curr = curr->next; ++i; } return i; } item *delete_value(item *head) { int value; item *current, *previous; current = head; printf("value for removing: "); scanf("%i", &value); while(current) { if (current->value == value) { if (current == head) { if (head->next == NULL) { free(current); return head = NULL; } head = current->next; free(current); current = head; } else { if (current->next != NULL) { previous->next = current->next; free(current); current = previous->next; } else { previous->next = NULL; free(current); return head; } } } previous = current; current = previous->next; } if (head == current) head = current; return head; }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д