sub insert_after {
$_[1]{next} = $_[0]{next};
$_[0]{next} = $_[1];
}
my %B = (
data => 3,
next => undef, # not a circular list
);
my %A = (
data => 1,
next => \%B,
);
my %C = (
data => 2,
);
insert_after \%A, \%C;
insert_after \%A, { data => 2 };
sub insert_after {
my $node = $_[0];
my $next = $node->{next};
shift;
while (defined $_[0]) {
$node->{next} = $_[0];
$node = $node->{next};
shift;
}
$node->{next} = $next;
}
my %list = ( data => 'A' );
insert_after \%list, { data => 'B' }, { data => 'C' };
my $list2;
insert_after $list2 = { data => 'A' }, { data => 'B' }, { data => 'C' };
insert_after $list2, { data => 'A2' }, { data => 'A3' };
insert_after $list2->{next}, { data => 'A2a' }, { data => 'A2b' };