blob: 19b105cf70521c0fd236607053f3dffd5406a58c (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
|
use v6d;
###############################################################################
=begin comment
Perl Weekly Challenge 094, Task #2: Binary Tree to Linked List
=end comment
###############################################################################
#--------------------------------------#
# Copyright © 2021 PerlMonk Athanasius #
#--------------------------------------#
#==============================================================================
unit class SinglyLinkedList;
#==============================================================================
#------------------------------------------------------------------------------
my class Node
#------------------------------------------------------------------------------
{
has Any $.value;
has Node $.next is rw;
}
has Node $.head is rw;
#------------------------------------------------------------------------------
submethod BUILD( :$value )
#------------------------------------------------------------------------------
{
if $value.defined
{
$!head = Node.new( value => $value, next => Nil );
}
}
#------------------------------------------------------------------------------
method append( Any $value )
#------------------------------------------------------------------------------
{
if $value.defined && $value ne ''
{
my Node $new-node = Node.new( value => $value, next => Nil );
if $!head.defined
{
my Node $current = $!head;
$current = $current.next while $current.next.defined;
$current.next = $new-node;
}
else
{
$!head = $new-node;
}
}
}
#------------------------------------------------------------------------------
method display( --> Str:D )
#------------------------------------------------------------------------------
{
my Str $display;
if $!head.defined
{
my Bool $first = True;
loop (my Node $node = $!head; $node.defined; $node = $node.next)
{
$display ~= ' -> ' unless $first;
$first = False;
$display ~= $node.value;
}
}
else
{
$display = '(empty)';
}
return $display;
}
##############################################################################
|