Perl中链接列表创建中NEXT的含义

Ame*_*mey 1 perl linked-list

所以我正在尝试使用Perl学习链接列表.我正在阅读Jon Orwant的Perl掌握算法.在书中,他解释了如何创建链表.我理解其中的大部分内容,但我只是无法理解NEXT代码片段的倒数第二行中的命令/ index/key .

$list=undef;
$tail=\$list;

foreach (1..5){
  my $node = [undef, $_ * $_];
  $$tail = $node;
  $tail = \${$node->[NEXT]}; # The NEXT on this line? 
}
Run Code Online (Sandbox Code Playgroud)

他想在那里做什么?

$node标量,它存储未命名数组的地址?即使我们解除引用$node,我们也不应该通过索引号引用单个元素,例如(0,1).如果我们NEXT用作键,是$node对哈希的引用?我很迷茫.

用英语简单的东西将受到高度赞赏.

Dav*_*idO 6

NEXT是一个常量,在脚本的早期声明.它包含一个整数值,表示引用下一个节点的当前节点的成员元素的索引.

在此方案下,每个节点都是一个小型匿名数组.此匿名数组的一个元素包含有效内容,另一个元素包含指向下一个节点的引用.

如果您查看该章中的一些早期示例,您将看到以下声明:

use constant NEXT    => 0;
use constant VAL     => 1;
Run Code Online (Sandbox Code Playgroud)

所以$node->[NEXT]是同义词$node->[0],它包含对链表链中下一个节点的引用,同时$node->[VAL]$node->[1]; 存储在当前节点中的值(或有效负载).

我会对您提供的代码段发表评论:

foreach (1..5){
  my $node = [undef, $_ * $_];    # Create a new node as an anon array.

  # Set the previous node's "next node reference" to point to this new node.
  $$tail = $node;                 

  # Remember a reference to the new node's "next node reference" element.
  # So that it can be updated when another new element is added on next iteraton.
  $tail = \${$node->[NEXT]}; # The NEXT on this line? 
}
Run Code Online (Sandbox Code Playgroud)

顺便说一句,优秀的书.我有几本算法书籍,这些年后仍然是我的最爱之一.

更新:我同意这本书不是当前惯用的Perl或当前的"最佳实践"Perl的模型,但确实觉得它是一个很好的资源,可以通过Perl了解经典算法的应用.我仍然不时地回顾它.