Display n-th element in the list

This commit is contained in:
2025-10-21 12:01:52 +02:00
parent 36cc9bd56a
commit 6091b4a418

40
main.c
View File

@@ -14,12 +14,28 @@ void rem(struct List **list, int value_to_remove);
void print_list(const struct List *list); void print_list(const struct List *list);
int *get(const struct List *list, int n);
int llen(const struct List *list);
int main(void) { int main(void) {
struct List *seznam = init(1); struct List *seznam = init(1);
add(seznam, 5); add(seznam, 5);
add(seznam, 2); add(seznam, 2);
print_list(seznam); print_list(seznam);
constexpr int n = 2;
int *get_n = get(seznam, n);
printf("Attempting to find %d. element => ", n);
if (get_n == NULL) {
// element doesn't exist
printf("failed!");
} else {
printf("succeeded. Value = %d", *get_n);
free(get_n);
}
printf("\n\n");
rem(&seznam, 1); rem(&seznam, 1);
print_list(seznam); print_list(seznam);
@@ -102,3 +118,27 @@ void print_list(const struct List *list) {
} }
printf("\n"); printf("\n");
} }
// we will pretend the user is not a programmer and enters n=1 for first element and so on
int *get(const struct List *list, const int n) {
const int list_len = llen(list);
if (n > list_len || n <= 0) return nullptr;
for (int i = 0; i < n - 1; i++) {
list = list->next;
}
int *val = malloc(sizeof(int));
*val = list->value;
return val;
}
int llen(const struct List *list) {
int len = 0;
for (; list != NULL; list = list->next) {
len++;
}
return len;
}