C Fundamentals
Algorithms · data structures · cryptography · systems — pure C11, zero deps
Loading...
Searching...
No Matches
linked_list.h
Go to the documentation of this file.
1/**
2 * @file linked_list.h
3 * @brief Singly-linked list of `int`.
4 *
5 * Designed for clarity over performance. Owns its nodes — `ll_destroy`
6 * frees every node. Caller never touches the node struct directly; all
7 * operations go through the list handle.
8 *
9 * | Operation | Time |
10 * |-----------------|------|
11 * | push_front | O(1) |
12 * | push_back | O(n) (no tail pointer cached) |
13 * | pop_front | O(1) |
14 * | find | O(n) |
15 * | size | O(1) (cached) |
16 */
17
18#ifndef LINKED_LIST_H
19#define LINKED_LIST_H
20
21#include <stdbool.h>
22#include <stddef.h>
23
24typedef struct ll_node {
25 int value;
26 struct ll_node *next;
28
29typedef struct {
31 size_t size;
33
35void ll_destroy(linked_list_t *list);
36
37bool ll_push_front(linked_list_t *list, int value);
38bool ll_push_back(linked_list_t *list, int value);
39bool ll_pop_front(linked_list_t *list, int *out_value);
40
41/** Returns the index of `value`, or `(size_t)-1` if missing. */
42size_t ll_find(const linked_list_t *list, int value);
43size_t ll_size(const linked_list_t *list);
44bool ll_is_empty(const linked_list_t *list);
45
46/** Reverses the list in place. O(n). */
47void ll_reverse(linked_list_t *list);
48
49#define LL_NOT_FOUND ((size_t)-1)
50
51#endif /* LINKED_LIST_H */
bool ll_is_empty(const linked_list_t *list)
Definition linked_list.c:79
size_t ll_size(const linked_list_t *list)
Definition linked_list.c:75
size_t ll_find(const linked_list_t *list, int value)
Definition linked_list.c:66
void ll_reverse(linked_list_t *list)
Definition linked_list.c:83
bool ll_pop_front(linked_list_t *list, int *out_value)
Definition linked_list.c:56
struct ll_node ll_node_t
bool ll_push_front(linked_list_t *list, int value)
Definition linked_list.c:27
void ll_destroy(linked_list_t *list)
Definition linked_list.c:16
bool ll_push_back(linked_list_t *list, int value)
Definition linked_list.c:38
linked_list_t * ll_create(void)
Definition linked_list.c:8
ll_node_t * head
Definition linked_list.h:30
struct ll_node * next
Definition linked_list.h:26
int value
Definition linked_list.h:25