所以我知道有上百棟的堆棧溢出,而事實上我已經使用從那裏所有的信息 - 所以這是我所在Perl反向鏈接列表
use strict;
use warnings;
use Data::Dumper;
my $head= undef;
my $tail=\$head;
open FILE, "<datastored.txt" or die $!;
while (<FILE>){
my $node = {
"data" => $_ ,
"next" => undef
};
$$tail=$node;
$tail = \$node->{"next"};
};
print Dumper $head; #before reversing
$head = reverse_list($head);
print Dumper $head; #after reversing
sub reverse_list{
my ($list) [email protected]_[0];
my $previous = undef;
while ($list->{next}){
$forward = $list->{next};
$list->{next}= $previous;
$previous = $list;
$list=$forward;
};
return $previous;
};
,這是輸出我得到
#this is the output before reversing (normal linked list)
$VAR1 = {
'next' => {
'next' => {
'next' => {
'next' => undef,
'data' => 'line 4
'
},
'data' => 'line 3
'
},
'data' => 'line 2
'
},
'data' => 'line 1
'
};
#this is the linked list after reversing (WITHOUT THE LAST DATA VARIABLE - "line 4")
$VAR1 = {
'next' => {
'next' => {
'next' => undef,
'data' => 'line 1
'
},
'data' => 'line 2
'
},
'data' => 'line 3
'
};
注 - 文件datastored.txt
的內容僅僅是
line 1
line 2
line 3
line 4
所以我的問題是數據「第4行」已經消失了,應該怎樣改變才能真正反轉鏈接列表而不會丟失任何值。
你的代碼不能編譯,因爲你在給'$ forward'賦值前忘了'my'。不過,除了@ dirkgently的回答外,我還有一個額外的建議。你應該安裝CPAN'Data :: Dump'模塊,並將'print Dumper'的兩個實例更改爲'dd'(更改'use Data :: Dump'後)。輸出比Data :: Dumper'更容易讀取。 – tchrist
那麼你可以在文件頂部刪除'use strict;'和'warnings;'。也感謝您的建議 - 數據::轉儲,我一定會嘗試一下 – Amey
我看你還有'我的$尾= \ $頭;錯誤? – ikegami