blob: 49d77e573b1267f4d953ee8cb1c08fd5e9585535 (
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
|
# Test: perl6 ch-2.p6
class LinkedList::Node {
has Int $.value is rw;
has LinkedList::Node $.next is rw;
}
class LinkedList {
has LinkedList::Node $.first is rw;
# Create the list
method create-list(*@values) {
my $prev_node;
# Populate the list
for @values -> $value {
my $node = LinkedList::Node.new(value => $value);
# Populate first and next nodes
if ($prev_node) {
$prev_node.next = $node
} else {
self.first = $node;
}
# Next node
$prev_node = $node;
}
}
method reorder-list(Int $k) {
# Loop through the nodes
my $node = self.first;
# Process each node
while ($node) {
my $next_node = $node.next;
my $traverse_node = $node;
my $last_node = $node;
# Traverse Linked list
while ($traverse_node.next) {
$last_node = $traverse_node;
$traverse_node = $traverse_node.next;
}
# Move the nodes around
$node.next = $traverse_node;
if ($next_node && $next_node.next) {
$traverse_node.next = $next_node;
$last_node.next = Nil;
} else {
$traverse_node.next = Nil;
}
# Next node
$node = $next_node;
}
}
method display-list {
my $node = self.first;
my @keys;
while ($node) {
@keys.push($node.value);
$node = $node.next;
}
return @keys.join(" → ");
}
}
sub MAIN() {
my $ll = LinkedList.new();
$ll.create-list(1,2,3,4);
say 'Before: ' ~ $ll.display-list;
$ll.reorder-list(3);
say 'After: ' ~ $ll.display-list;
}
|