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
|
#!/usr/bin/perl
use warnings;
use strict;
sub add_linked_lists {
my ($l1, $l2) = @_;
my $carry = 0;
my $reversed;
while (@$l1 || @$l2 || $carry) {
my $e1 = shift @$l1 // 0;
$l1 = shift @$l1 || [];
my $e2 = shift @$l2 // 0;
$l2 = shift @$l2 || [];
my $r = $e1 + $e2 + $carry;
$carry = int($r / 10);
$r %= 10;
$reversed = $reversed ? [$r, $reversed] : [$r];
}
return [] unless $reversed;
my $result = [shift @$reversed];
while (@$reversed) {
$reversed = shift @$reversed;
$result = [shift @$reversed, $result];
}
return $result
}
use Test2::V0;
plan 3;
is add_linked_lists([3, [2, [1]]],[1, [2, [3]]]),
[4, [4, [4]]], 'Example 1';
is add_linked_lists([5, [4, [3, [2, [1]]]]], [5, [5, [6]]]),
[0, [0, [0, [3, [1]]]]], 'Example 2';
is add_linked_lists([5, [9]], [5]),
[0, [0, [1]]], 'Carry not lost even when both lists are exhausted';
|