Files
C3/002LinkedList/src/main.c3
T
2026-05-19 08:07:22 -04:00

125 lines
2.0 KiB
C3

module linkedlist;
import std::io;
struct Vector2 {
int x;
int y;
}
struct Node {
// Node.x
//struct {
// int x;
//}
Vector2 *vec;
Node *next;
}
fn Node* init(Vector2 *vec) {
Node *node = alloc::alloc(mem, Node);
node.vec = vec;
node.next = null;
return node;
}
// &self == Node *self
fn void Node.append(&self, Vector2 *v2) {
Node *newNode = init(v2);
Node *prev;
Node *current = self;
while (current != null) {
prev = current;
current = current.next;
}
prev.next = newNode;
newNode.next = null;
}
fn void Node.insertAfter(&self, Vector2 *key, Vector2 *v2) {
Node *newNode = init(v2);
newNode.vec = v2;
Node *current = self;
while (current != null) {
if (current.vec == key) {
break;
}
current = current.next;
}
newNode.next = current.next;
current.next = newNode;
}
fn void Node.deleteNode(&self, Vector2 *key) {
Node *current = self;
Node *prev;
while (current != null) {
if (current.vec == key) {
break;
}
prev = current;
current = current.next;
}
prev.next = current.next;
alloc::free(mem, current);
}
fn void Node.printList(&self) {
Node *current = self;
io::printf("head-> ");
while (current != null) {
io::printf("(%d, %d) -> ", current.vec.x, current.vec.y);
current = current.next;
}
io::printfn("tail");
}
fn uint Node.count(&self) {
uint count = 0;
Node *current = self;
while (current != null) {
count++;
current = current.next;
}
return count;
}
fn int main(String[] args) {
Vector2 v1 = { .x = 1, .y = 2 };
Vector2 v2 = { .x = 3, .y = 4 };
Vector2 v3 = { .x = 5, .y = 6 };
Vector2 v4 = { .x = 7, .y = 8 };
Node* list = init(&v1);
list.append(&v2);
list.append(&v3);
list.printList();
io::printfn("count: %d", list.count());
list.insertAfter(&v2, &v4);
list.printList();
io::printfn("count: %d", list.count());
list.deleteNode(&v4);
list.printList();
io::printfn("count: %d", list.count());
return 0;
}