-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathllist.c
More file actions
59 lines (52 loc) · 1.18 KB
/
Copy pathllist.c
File metadata and controls
59 lines (52 loc) · 1.18 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
#include "llist.h"
void LList_init(LList_t *list)
{
list->head = NULL;
list->tail = NULL;
list->size = 0;
}
inline LListItem_t *LList_head(LList_t *list) { return list->head; }
inline LListItem_t *LList_tail(LList_t *list) { return list->tail; }
void LList_append(LList_t *list, void *item)
{
LListItem_t *litem = (LListItem_t *)malloc(sizeof(LListItem_t));
litem->next = NULL;
litem->prev = NULL;
litem->obj = item;
if (list->head == NULL)
list->head = litem;
if (list->tail)
{
list->tail->next = litem;
litem->prev = list->tail;
}
list->tail = litem;
list->size++;
}
void *LList_pop(LList_t *list)
{
LListItem_t *tail = list->tail;
void *out = tail->obj;
if (list->tail == list->head)
{
list->tail = NULL;
list->head = NULL;
}
else
{
list->tail = tail->prev;
list->tail->next = NULL;
}
list->size--;
free(tail);
return out;
}
void *LList_get(LList_t *list, size_t index)
{
if (index >= list->size)
return NULL;
LListItem_t *item = list->head;
for (size_t i = 0; i < index; i++)
item = item->next;
return item->obj;
}