43 lines
1013 B
Zig
43 lines
1013 B
Zig
const std = @import("std");
|
|
|
|
var arena = std.heap.ArenaAllocator.init(std.heap.page_allocator);
|
|
|
|
const allocator = arena.allocator();
|
|
|
|
pub fn LinkedList(comptime Value: type) type {
|
|
return struct {
|
|
const This = @This();
|
|
|
|
const Node = struct {
|
|
value: Value,
|
|
next: ?*Node,
|
|
};
|
|
|
|
head: ?*Node,
|
|
tail: ?*Node,
|
|
|
|
pub fn init() This {
|
|
return LinkedList(Value) {
|
|
.head = null,
|
|
.tail = null,
|
|
};
|
|
}
|
|
|
|
pub fn add(this: *This, value: Value) !void {
|
|
var newNode = try allocator.create(Node);
|
|
|
|
newNode.* = .{ .value = value, .next = null };
|
|
|
|
if (this.tail) |tail| {
|
|
tail.next = newNode;
|
|
this.tail = newNode;
|
|
} else if (this.head) |head| {
|
|
head.next = newNode;
|
|
this.tail = newNode;
|
|
} else {
|
|
this.head = newNode;
|
|
}
|
|
}
|
|
};
|
|
}
|