insert_node
=====================================================================
void insert_node(Node **start, int insert_after_value, int value) { Node *current = *start; do { if(insert_after_value == current->data) { Node *new_node = (Node*)malloc(sizeof(Node)); new_node->data = value; new_node->next = NULL; if(current->next == *start) { current->next = new_node; new_node->next = *start; break; } else { new_node->next = current->next; current->next = new_node; break; } } current = current->next; }while(current != *start); }
=====================================================================
add_node
=====================================================================
void add_node(Node **start, int value) { Node *new_node = (Node*)malloc(sizeof(Node)); new_node->data = value; new_node->next = NULL; if(*start == NULL) { *start = new_node; (*start)->next = *start; return; } else { Node *current; current = *start; while(current->next != *start) { current = current->next; } current->next = new_node; new_node->next = *start; return; } }=====================================================================
delete node
=====================================================================
void delete_node(Node **start, int value) { Node *current = *start; Node *temp; if(value == current->data) { *start = current->next; (*start)->prev = NULL; free(current); return; } while(current != NULL) { if(current->next->data == value) { temp = current->next; current->next = current->next->next; if(current->next != NULL) current->next->prev = current; free(temp); return; } current = current->next; } }=====================================================================
=====================================================================
void print_list(Node *node) { Node *first_node = node; printf("%d ", node->data); node = node->next; while(node != NULL) { if(node == first_node) break; printf("%d ", node->data); node = node->next; } printf("%d\n", node->data); }=====================================================================
free
=====================================================================
void free_list(Node *node) { int total_node = 1; Node *first = node; node = node->next; while(node != first) { node = node->next; total_node++; } Node *current = first; Node *temp; int i; for(i = 0; i < total_node; i++) { temp = current; current = current->next; free(temp); } }=====================================================================
inverse_print_list=====================================================================
void inverse_print_list(Node *node) { printf("Inverse List:\n"); while(node != NULL) { printf("%d ", node->data); node = node->prev; } printf("\n"); }=====================================================================
main
=====================================================================
#include <stdio.h> #include <stdlib.h> typedef struct node { int data; struct node *next; struct node *prev; }Node; void add_node(Node **start, int value); void print_list(Node *node); void insert_node(Node **start, int insert_after_value, int value); void delete_node(Node **start, int value); void inverse_print_list(Node *node); void free_list(Node *node); int main(int argc, char* argv[]) { // create first node "head" Node *head = NULL; add_node(&head, 5); add_node(&head, 128); add_node(&head, 41); // insert non-exist node, linked list would not have changed insert_node(&head, 77, 92); // insert after node of data 128 insert_node(&head, 128, 84); // insert after the last node insert_node(&head, 41, 97); // delete the first node delete_node(&head, 5); // delete the node of data 41 delete_node(&head, 41); // delete the last node delete_node(&head, 97); print_list(head); Node *last = head; while(last->next != NULL) { last = last->next; } inverse_print_list(last); free_list(head); return 0; }
=====================================================================
No comments:
Post a Comment