-
Notifications
You must be signed in to change notification settings - Fork 0
/
linkedList.c
76 lines (62 loc) · 1.53 KB
/
linkedList.c
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
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
#include <jo/jo.h>
#include "linkedList.h"
void linkedList_Initialize(linked_List * list)
{
list->Current = JO_NULL;
list->Next = JO_NULL;
}
void linkedList_Clear_all(linked_List * list)
{
linked_List *current = list;
while (current != JO_NULL)
{
if (current->Current != JO_NULL)
{
jo_free(current->Current);
current->Current = JO_NULL;
}
linked_List *next = current->Next;
current->Next = JO_NULL;
if (list != current)
jo_free(current);
current = next;
}
}
void linkedList_Add(linked_List * list, void * item)
{
linked_List *current = list;
while (current->Current != JO_NULL)
{
current = current->Next;
}
current->Current = item;
// Add next empty item
if (current->Next == JO_NULL)
{
linked_List *newItem = jo_malloc(sizeof(linked_List));
newItem->Current = JO_NULL;
newItem->Next = JO_NULL;
current->Next = newItem;
}
}
void linkedList_Remove(linked_List * list, void * item)
{
linked_List *last = JO_NULL;
linked_List *current = list;
while (current->Next != JO_NULL && current->Current != item)
{
last = current;
current = current->Next;
}
if (current->Current == item)
{
jo_free(current->Current);
current->Current = JO_NULL;
if (last != JO_NULL)
{
linked_List *next = current->Next;
jo_free(current);
last->Next = next;
}
}
}