@ <stdio.hdr>
@ <stdlib.hdr>
struct Node
{
val: int;
next: -> Node;
};
fn prependToList(list: -> -> Node, val: int)
{
local n: -> Node = malloc(sizeof(*n));
if (!n) {
printf("out of memory\n");
exit(1);
}
n->val = val;
n->next = *list;
*list = n;
}
fn printList(list: -> Node)
{
for (; list; list = list->next) {
printf("val = %d\n", list->val);
}
}
fn printListRec(list: -> Node)
{
if (list) {
printf("val = %d\n", list->val);
printListRec(list->next);
}
}
fn printListReverse(list: -> Node)
{
if (list) {
printListReverse(list->next);
printf("val = %d\n", list->val);
}
}
fn freeList(list: -> Node)
{
if (list) {
freeList(list->next);
free(list);
}
}
fn main()
{
local list: -> Node = nullptr;
for (local i: int = 1; i <= 10; ++i) {
prependToList(&list, i);
}
//printf("5 is %s list\n", isInList(list, 5) ? "in" : "not in");
printf("list:\n");
printList(list);
printf("list:\n");
printListRec(list);
printf("list in reverse order:\n");
printListReverse(list);
freeList(list);
}