From 3a6d7fdfcfe7fe1fa1c09788287e1b005a85a71e Mon Sep 17 00:00:00 2001 From: Blake Romero Date: Mon, 13 Oct 2025 23:21:54 +0100 Subject: Updated list tests & refactored code --- src/lib/list.c | 43 ++++++++++++++++++++++++++----------------- src/lib/list.h | 12 +++++++----- 2 files changed, 33 insertions(+), 22 deletions(-) (limited to 'src') diff --git a/src/lib/list.c b/src/lib/list.c index 26c8cc1..a0357e9 100644 --- a/src/lib/list.c +++ b/src/lib/list.c @@ -15,6 +15,10 @@ Node* node_init(int value) { } void list_print(Node* head) { + if (head == NULL) { + puts("list is NULL"); + return; + } Node* node = head; printf("[ "); while (node != NULL) { @@ -22,7 +26,6 @@ void list_print(Node* head) { node = node->next; } printf("]\n"); - free(node); } void list_vprint(Node* head) { @@ -32,7 +35,25 @@ void list_vprint(Node* head) { node = node->next; printf(" |\n"); } - printf("[/] %s\n", (char*) node); + printf("[/] %s\n", (char *)node); +} + +int list_get(Node* n, int index) { + Node* m = n; + if (index > list_length(n)-1) return -1; + for (int i=0; inext; + return m->value; +} + +void list_set(Node* n, int index, int value) { + if (index > list_length(n)) { + puts("Error: Setting list out of bounds"); + return; + } + Node *m = n; + for (int i=0; inext; + m->value = value; } int list_length(Node* head) { @@ -54,8 +75,8 @@ int list_pop(Node** head) { return val; } -void list_append(Node* head, int value) { - Node* n = head; +void list_append(Node** head, int value) { + Node* n = *head; while (n->next != NULL) n = n->next; n->next = node_init(value); } @@ -77,25 +98,13 @@ void list_insert(Node** head, int value, int index) { void list_free(Node** head) { while (*head != NULL) { Node* n = *head; + n->value=0; *head = (*head)->next; free(n); } *head = NULL; } -int list_rmlast(Node** head) { - Node* n = *head; - Node* cur = NULL; - while (n->next != NULL) { - cur = n; - n = n->next; - } - int val = n->value; - cur->next = NULL; - free(n); - return val; -} - int list_rm(Node** head, int index) { Node* n = *head; Node* cur = NULL; diff --git a/src/lib/list.h b/src/lib/list.h index 58a7751..11eeee2 100644 --- a/src/lib/list.h +++ b/src/lib/list.h @@ -17,6 +17,12 @@ Node* node_init(int value); void list_print(Node* head); void list_vprint(Node* head); +// Get value at index +int list_get(Node* n, int i); + +// Set value at index +void list_set(Node* n, int index, int value); + // Return number of nodes in list // O(n) int list_length(Node* head); @@ -31,7 +37,7 @@ int list_pop(Node** head); // Append value to the end of the list // O(n) -void list_append(Node* head, int value); +void list_append(Node** head, int value); // Insert a value to the list at index // O(n) @@ -41,10 +47,6 @@ void list_insert(Node** head, int value, int index); // O(n) void list_free(Node** head); -// Remove last node -// O(n) -int list_rmlast(Node** head); - // Remove node at index // O(n) int list_rm(Node** head, int index); -- cgit