more work on linked list

This commit is contained in:
ergz 2023-07-07 22:08:44 -07:00
parent be4a1c4fc0
commit ebfc215fb4
1 changed files with 59 additions and 4 deletions

View File

@ -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("] <length: %d>\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);