From ebfc215fb4a64ed876ccd47490db03e215cf7397 Mon Sep 17 00:00:00 2001 From: ergz Date: Fri, 7 Jul 2023 22:08:44 -0700 Subject: [PATCH] more work on linked list --- c/linked_list.c | 63 +++++++++++++++++++++++++++++++++++++++++++++---- 1 file changed, 59 insertions(+), 4 deletions(-) diff --git a/c/linked_list.c b/c/linked_list.c index a4d768b..b51ee44 100644 --- a/c/linked_list.c +++ b/c/linked_list.c @@ -80,6 +80,17 @@ void insert_at(LinkedList* list, Node* node, int index) { } } +void remove_at_end(LinkedList* list) { + if (list->length == 0) { + printf("ERROR: cannot remove from an empty list\n"); + } else { + Node* node_to_remove = list->tail; + list->tail = node_to_remove->prev; + list->tail->next = NULL; + free(node_to_remove); + } +} + int get_length(LinkedList* list) { return (list->length); } @@ -109,25 +120,69 @@ void print_list(LinkedList* list) { printf("] \n", get_length(list)); } +LinkedList* new_list_from_array(int arr[], int length) { + if (length == 0) { + printf("ERROR: i mean c'mon"); + } + LinkedList* list = new_linked_list(); + Node* n = new_node(arr[1]); + list->head = n; + list->length++; + for (int i = 1; i < length; i++) { + Node* n = new_node(arr[i]); + append(list, n); + } + + return (list); +} + int main() { LinkedList* list = new_linked_list(); - Node* a = new_node(10); - Node* b = new_node(11); + + Node* a = new_node(10); + Node* b = new_node(11); preppend(list, a); + print_list(list); preppend(list, b); + print_list(list); preppend(list, new_node(12)); + print_list(list); preppend(list, new_node(13)); + print_list(list); preppend(list, new_node(14)); + print_list(list); preppend(list, new_node(15)); + print_list(list); append(list, new_node(100)); - append(list, new_node(200)); - print_list(list); + append(list, new_node(200)); + print_list(list); + insert_at(list, new_node(-1), 0); + print_list(list); insert_at(list, new_node(-1), 4); print_list(list); + remove_at_end(list); + print_list(list); + remove_at_end(list); + print_list(list); + remove_at_end(list); + print_list(list); + remove_at_end(list); + print_list(list); + remove_at_end(list); + print_list(list); + remove_at_end(list); + print_list(list); + remove_at_end(list); + print_list(list); + remove_at_end(list); + print_list(list); + + int first_node_val = get_val(list, 1); + printf("the value at the first node is: %d\n", first_node_val); destroy_list(list); return (0);