首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在perl中反转链表

在perl中反转链表
EN

Stack Overflow用户
提问于 2012-06-10 09:06:26
回答 1查看 1.3K关注 0票数 1

所以我知道在Stack overflow上有上百个例子,实际上我已经使用了那里的所有信息-所以这就是我所拥有的

代码语言:javascript
复制
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) =@_[0];
    my $previous = undef;
    while ($list->{next}){
        $forward = $list->{next}; 
        $list->{next}= $previous; 
        $previous = $list; 
        $list=$forward; 
    };
    return $previous;   
};

这是我得到的输出

代码语言:javascript
复制
#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的内容只是

代码语言:javascript
复制
line 1
line 2
line 3
line 4

因此,我的问题是,数据“第4行”到哪里去了?我应该做些什么更改才能真正反转链表而不丢失任何值。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-06-10 09:16:49

您的反转子例程几乎是正确的。但是,由于您使用的条件,它会遗漏最后一个条目(即将其添加到最终的反转列表中)。您有两个选择:

  1. while ($list->{next})更改为while ($list)并使代码更加得体。
  2. while循环的末尾添加一个$list->{next}= $previous;,以将最后一个剩余节点添加回反转列表中。(想一想两个元素的列表,看看你的代码是做什么的)。
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10965712

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档