Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- #include <stdlib.h>
- struct list_node
- {
- int data;
- struct list_node *next;
- };
- struct list_node *add_first(struct list_node *pointer_list,int liczba)
- {
- struct list_node *new_node = (struct list_node*)malloc(sizeof(struct list_node));
- if(new_node)
- {
- new_node->data = liczba;
- new_node->next = pointer_list;
- pointer_list= new_node;
- }
- return pointer_list;
- }
- struct list_node *add_at_last(struct list_node *pointer_list, struct list_node *new_node)
- {
- new_node->next = pointer_list;
- return new_node;
- }
- struct list_node *looking_for_prev(struct list_node *pointer_list, int liczba)
- {
- struct list_node* prev = NULL;
- while(pointer_list && pointer_list->data > liczba)
- {
- prev = pointer_list;
- pointer_list = pointer_list->next;
- }
- return prev;
- }
- void add_in_middle_or_back(struct list_node *prev, struct list_node *new_node)
- {
- new_node->next=prev->next;
- prev->next = new_node;
- }
- struct list_node *add_node(struct list_node *pointer_list,int liczba)
- {
- struct list_node *new_node = (struct list_node*)malloc(sizeof(struct list_node));
- if(new_node && pointer_list)
- {
- new_node->data=liczba;
- if(pointer_list->data < liczba)
- {
- return add_at_last(pointer_list,new_node);
- }else
- {
- struct list_node *prev = looking_for_prev(pointer_list,liczba);
- add_in_middle_or_back(prev,new_node);
- }
- }
- return pointer_list;
- }
- struct list_node *delete_front(struct list_node *pointer_list)
- {
- struct list_node *tmp = pointer_list->next;
- free(pointer_list);
- return tmp;
- }
- struct list_node *looking_for_prev_delete(struct list_node *pointer_list, int liczba)
- {
- struct list_node *prev = NULL;
- while(pointer_list && pointer_list->data != liczba)
- {
- prev = pointer_list;
- pointer_list=pointer_list->next;
- }
- return prev;
- }
- void delete_middle_or_back(struct list_node *prev)
- {
- struct list_node *tmp = prev->next;
- prev->next=tmp->next;
- free(tmp);
- }
- struct list_node *delete_node(struct list_node *pointer_list,int liczba)
- {
- if(pointer_list)
- {
- if(pointer_list->data == liczba)
- {
- return delete_front(pointer_list);
- }else
- {
- struct list_node *prev = looking_for_prev_delete(pointer_list,liczba);
- delete_middle_or_back(prev);
- }
- }
- return pointer_list;
- }
- void print_list(struct list_node *pointer_list)
- {
- while(pointer_list)
- {
- printf("%d ",pointer_list->data);
- pointer_list=pointer_list->next;
- }
- puts("");
- }
- void remove_all(struct list_node **pointer_list)
- {
- struct list_node *tmp=(*pointer_list)->next;
- free(*pointer_list);
- *pointer_list = tmp;
- }
- int main()
- {
- struct list_node *pointer_list = NULL;
- pointer_list = add_first(pointer_list,2);
- print_list(pointer_list);
- pointer_list = add_node(pointer_list,0);
- pointer_list = add_node(pointer_list,3);
- pointer_list = add_node(pointer_list,7);
- pointer_list = add_node(pointer_list,8);
- print_list(pointer_list);
- pointer_list = add_node(pointer_list,4);
- pointer_list = add_node(pointer_list,5);
- pointer_list = add_node(pointer_list,6);
- print_list(pointer_list);
- pointer_list = delete_node(pointer_list,0);
- print_list(pointer_list);
- while(pointer_list)
- {
- remove_all(&pointer_list);
- }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement