From dc86ad6ea0a26aeef67f7057a3fa3d94e76b6e3c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ahmet=20Kaan=20G=C3=9CM=C3=9C=C5=9E?= <96421894+Tahinli@users.noreply.github.com> Date: Sun, 23 Jun 2024 22:20:01 +0300 Subject: [PATCH] feat: linked list --- 001-hello_world/main.c | 5 -- 002-data_types/main.c | 11 ---- Linked List in C/main.c | 115 ++++++++++++++++++++++++++++++++++++++++ 3 files changed, 115 insertions(+), 16 deletions(-) delete mode 100644 001-hello_world/main.c delete mode 100644 002-data_types/main.c create mode 100644 Linked List in C/main.c diff --git a/001-hello_world/main.c b/001-hello_world/main.c deleted file mode 100644 index ad7cc9f..0000000 --- a/001-hello_world/main.c +++ /dev/null @@ -1,5 +0,0 @@ -#include - -int main() { - printf("Hello World\n"); -} \ No newline at end of file diff --git a/002-data_types/main.c b/002-data_types/main.c deleted file mode 100644 index 7e71eba..0000000 --- a/002-data_types/main.c +++ /dev/null @@ -1,11 +0,0 @@ -#include - -int main() { - printf("Hello World\n"); - - int a = 3; - float b = 3.14; - char c = 'A'; - - printf("%d | %f | %c", a, b, c); -} \ No newline at end of file diff --git a/Linked List in C/main.c b/Linked List in C/main.c new file mode 100644 index 0000000..4b93b4b --- /dev/null +++ b/Linked List in C/main.c @@ -0,0 +1,115 @@ +#include +#include + +typedef struct Node Node; + +struct Node { + int value; + Node* next; +}; + +Node* create_node(Node* previous_node) { + Node* new_node = (Node*)malloc(sizeof(Node)); + new_node->next = NULL; + if (previous_node != NULL) { + previous_node -> next = new_node; + } + return new_node; +} + +void delete_node(Node* previous_node) { + Node* exact_node = previous_node->next; + previous_node->next = exact_node->next; + free(exact_node); +} + +Node* search_node(Node* head_node, int index) { + int i = 0; + Node* node = head_node; + while (node != NULL) { + if (i == index) { + return node; + } + node = node->next; + i++; + } + return NULL; +} + +void change_node_value(Node* head_node, int index, int value) { + Node* searched_void = search_node(head_node, index); + if (searched_void == NULL) { + printf("Out of range\n"); + } else { + Node* searched = searched_void; + searched->value = value; + } +} + +void travel_all_nodes(Node* head_node) { + Node* node = head_node; + int i = 0; + while (node != NULL) { + printf("%d. Node & Value is = %d\n", i, node->value); + node = node->next; + i++; + } +} + +int main(void) { + printf("Hello World\n"); + + Node* head_node= create_node(NULL); + head_node->value = 0; + + printf("How many node do you want ?\n"); + int node_count = 0; + scanf("%d", &node_count); + + + Node* previous_node = head_node; + for (int i = 0; inext; + previous_node->value = i+1; + } + + travel_all_nodes(head_node); + + printf("Which node do you want to be deleted ?\n"); + int delete_index = 0; + scanf("%d", &delete_index); + if (delete_index == 0) { + Node* head_node_will_be_deleted = head_node; + head_node = head_node->next; + free(head_node_will_be_deleted); + } else { + void* searched_previous_void = search_node(head_node, delete_index-1); + if (searched_previous_void == NULL) { + printf("Out of range\n"); + return -1; + } else { + Node* searched_previous = searched_previous_void; + if (searched_previous->next != NULL) { + delete_node(searched_previous); + printf("Deleted\n"); + } else { + printf("Out of range\n"); + return -1; + } + } + } + + travel_all_nodes(head_node); + + printf("Which node do you want to change it's value ?\n"); + int change_node_value_index = 0; + scanf("%d", &change_node_value_index); + + printf("What value do you want to assign ?\n"); + int new_node_value = 0; + scanf("%d", &new_node_value); + change_node_value(head_node, change_node_value_index, new_node_value); + + travel_all_nodes(head_node); +} \ No newline at end of file