写一个长的,单向循环链表- STDOUT->autoflush(1);
- my $node = {};
- my $size = 41; #元素数量
- my $head = $node;
- my $ref = $head;
- init_node( $node, $size );
-
- while ( $size > 2 ) {
- $iter++;
- if ( $iter % 3 == 0 ) {
- $head = $ref->{next} if ($ref == $head);
- $prev->{next} = $ref->{next};
- $size--;
- }
- $prev = $ref;
- $ref = $ref->{next};
- }
-
- print_node($head, $head);
-
- sub print_node {
- my ($ref, $head) = @_;
- do {
- printf "%d ", $ref->{v};
- $ref = $ref->{next};
- } until ( $ref == $head );
- printf "\n";
- }
-
- # 链表初始化
- sub init_node {
- my ($ref, $size) = @_;
- $ref->{v} = 1;
- for my $i ( 2 .. $size ) {
- $ref->{next} = { 'v' => $i, 'next' => $head };
- $ref = $ref->{next};
- }
- }
复制代码
|