Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- #include <stdlib.h>
- typedef struct node {
- int value;
- struct node *next;
- } node;
- void print_list(node *head) {
- while (head != NULL) {
- printf("%d -> ", head->value);
- head = head->next;
- }
- printf("NULL\n");
- }
- node *insert_head(node *head, int val) {
- node *new = malloc(sizeof(node));
- new->next = head;
- new->value = val;
- return new;
- }
- void in_order_insert(node **head, int val) {
- node *new = malloc(sizeof(node));
- node **curr = head;
- node **prev = NULL;
- while (*curr && val > (*curr)->value) {
- prev = curr;
- curr = &((*curr)->next);
- }
- (*prev)->next = new;
- new->next = *curr;
- }
- // void in_order_insert(node **head, int val) {
- // node *new = malloc(sizeof(node));
- // node **prev = NULL;
- // node *curr = *head;
- // new->next = NULL;
- // new->value = val;
- // if (!*head) {
- // *head = new;
- // return;
- // }
- // // printf("looping");
- // while (curr && val > curr->value) {
- // *prev = curr;
- // curr = curr->next;
- // }
- // (*prev)->next = new;
- // new->next = curr;
- // // return head;
- // // printf("insert at:%d\n", curr->value);
- // }
- void append(node **head, int val) {
- node *new = malloc(sizeof(node)), **it;
- new->next = NULL;
- new->value = val;
- for (it = head; *it; it = &(*it)->next);
- *it = new;
- }
- void reverse(node **head) {
- node *prev = NULL;
- node *curr = *head;
- node *next;
- while (curr != NULL) {
- next = curr->next;
- curr->next = prev;
- prev = curr;
- curr = next;
- }
- *head = prev;
- }
- node *find(node *list, int key) {
- while (list && list->value != key)
- list = list->next;
- return list;
- }
- node *delete_list(node *list, node *target) {
- if (list == target) {
- return list->next;
- }
- node *prev = NULL;
- while (list != target) {
- prev = list;
- list = list->next;
- }
- prev->next = list->next;
- free(list);
- return list;
- }
- void free_list(node *list) {
- node *next;
- while (list != NULL) {
- printf("deleting: %d\n", list->value);
- next = list->next;
- free(list);
- list = next;
- }
- }
- int main() {
- node *list = NULL;
- append(&list, 99);
- list = insert_head(list, 10);
- list = insert_head(list, 20);
- print_list(list);
- reverse(&list);
- list = delete_list(list, find(list, 99));
- in_order_insert(&list, 15);
- print_list(list);
- free_list(list);
- return 0;
- }
- void insert_item_end ( node ** head , int val ) {
- node * temp = malloc ( sizeof ( node ) ) ;
- if (! temp ) return ;
- temp -> value = val ;
- temp -> next = NULL ;
- if (* head ) {
- node * ele = * head ;
- for( ; ele -> next ; ele = ele -> next ) ;
- ele -> next = temp ;
- }
- else
- * head = temp ;
- }
- void append1(node *head, int val) {
- node *new = malloc(sizeof(node));
- new->next = NULL;
- new->value = val;
- while (head->next != NULL)
- head = head->next;
- head->next = new;
- }
- void append2(node **head, int val) {
- node *new = malloc(sizeof(node));
- new->next = NULL;
- new->value = val;
- if (!*head) {
- *head = new;
- return;
- }
- node *it = *head;
- while (it->next != NULL)
- it = it->next;
- it->next = new;
- }
- void append3(node **head, int val) {
- node *new = malloc(sizeof(node));
- new->next = NULL;
- new->value = val;
- node **it = head;
- while (*it != NULL)
- it = &((*it)->next); // it = &(**it).next;
- *it = new;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement