Singly-linked list/Element insertion: Difference between revisions

Add Zig example
m (→‎{{header|Phix}}: syntax coloured, made p2js compatible)
(Add Zig example)
Line 2,237:
<lang zkl>a:=ROList("a","b","c");
n:=a.index("b"); a[0,n].append("foo").extend(a[n,*]) //-->ROList("a","foo","b","c")</lang>
 
=={{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>
 
Create a new list:
 
<lang zig>
var l1 = LinkedList(i32).init();
</lang>
 
Add element:
 
<lang zig>
try list.add(1);
</lang>