Singly-linked list/Element definition: Difference between revisions
Content added Content deleted
m (→{{header|Phix}}: syntax coloured) |
No edit summary |
||
Line 1,996: | Line 1,996: | ||
100 81 64 49 36 25 16 9 4 1 |
100 81 64 49 36 25 16 9 4 1 |
||
</pre> |
</pre> |
||
=={{header|Zig}}== |
|||
<lang 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; |
|||
} |
|||
} |
|||
}; |
|||
}</lang> |
|||
=={{header|zkl}}== |
=={{header|zkl}}== |