Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- #include <stdlib.h>
- /*
- https://www.learn-c.org/en/Linked_lists
- https://www.tutorialspoint.com/data_structures_algorithms/linked_list_program_in_c.htm
- https://www.log2base2.com/data-structures/linked-list/linked-list-in-c.html
- */
- typedef struct node
- {
- int value;
- struct node *next;
- }node;
- node *head = NULL;
- void printlist( node *p)
- {
- while (p != NULL)
- {
- printf("%d \n", p->value);
- p = p->next;
- }
- }
- void add(int i)
- {
- if (!head)
- {
- head = malloc(sizeof( node));
- head->value = i;
- head->next = NULL;
- } else
- {
- node *n = malloc(sizeof( node));
- n->value = i;
- n->next = head;
- head = n;
- }
- }
- void push(int i)
- {
- if (!head)
- {
- head = malloc(sizeof( node));
- head->value = i;
- head->next = NULL;
- } else
- {
- node * current = head;
- while (current->next != NULL)
- {
- current = current->next;
- }
- current->next = (node *) malloc(sizeof(node));
- current->next->value = i;
- current->next->next = NULL;
- }
- }
- int pop()
- {
- int retval = -1;
- node * next_node = NULL;
- if (head == NULL)
- {
- return -1;
- }
- next_node = head->next;
- retval = head->value;
- free(head);
- head = NULL;
- head = next_node;
- return retval;
- }
- int rem()
- {
- int retval = 0;
- if (head == NULL)
- {
- return -1;
- }
- if (head->next == NULL)
- {
- retval = head->value;
- free(head);
- head = NULL;
- return retval;
- }
- node * current = head;
- while (current->next->next != NULL)
- {
- current = current->next;
- }
- retval = current->next->value;
- free(current->next);
- current->next = NULL;
- return retval;
- }
- void deleteNone(int key)
- {
- node* current = head;
- node* previous = NULL;
- if(head == NULL)
- {
- return ;
- }
- while(current->value != key)
- {
- if(current->next == NULL)
- {
- return ;
- } else
- {
- previous = current;
- current = current->next;
- }
- }
- if(current == head)
- head = head->next;
- else
- previous->next = current->next;
- free (current);
- current = NULL;
- }
- void deleteList()
- {
- node* current = head;
- node* next;
- while (current != NULL)
- {
- next = current->next;
- free(current);
- current = next;
- }
- head = NULL;
- }
- int main()
- {
- add(0);
- add(1);
- add(2);
- add(3);
- push(100);
- push(200);
- deleteNone(100);
- rem();
- printlist(head);
- deleteList();
- printlist(head);
- }
Add Comment
Please, Sign In to add comment