[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖
写一个长的,单向循环链表
  1. STDOUT->autoflush(1);
  2. my $node = {};
  3. my $size = 41;      #元素数量
  4. my $head = $node;
  5. my $ref = $head;
  6. init_node( $node, $size );
  7. while ( $size > 2 ) {
  8.     $iter++;
  9.     if ( $iter % 3 == 0 ) {
  10.         $head = $ref->{next} if ($ref == $head);
  11.         $prev->{next} = $ref->{next};
  12.         $size--;
  13.     }
  14.     $prev = $ref;
  15.     $ref = $ref->{next};
  16. }
  17. print_node($head, $head);
  18. sub print_node {
  19.     my ($ref, $head) = @_;
  20.     do {
  21.         printf "%d ", $ref->{v};
  22.         $ref = $ref->{next};
  23.     } until ( $ref == $head  );
  24.     printf "\n";
  25. }
  26. # 链表初始化
  27. sub init_node {
  28.     my ($ref, $size) = @_;
  29.     $ref->{v} = 1;
  30.     for my $i ( 2 .. $size ) {
  31.         $ref->{next} = { 'v' => $i, 'next' => $head };
  32.         $ref = $ref->{next};
  33.     }
  34. }
复制代码
1

评分人数

TOP

本帖最后由 523066680 于 2019-3-4 14:11 编辑

C艹
  1. #include <algorithm>
  2. #include <iostream>
  3. #include <list>
  4. using namespace std;
  5. int main() {
  6.     list<int> ele;
  7.     for (int n= 1; n <= 41; n++) ele.push_back(n);
  8.     auto it = ele.begin();
  9.     for (int n = 1; ele.size() > 2; n++ ) {
  10.         it = n % 3 == 0 ? ele.erase( it ) : next(it);
  11.         if ( it == ele.end() ) it = ele.begin();
  12.     }
  13.     for (int n : ele ) cout << n << " ";
  14. }
复制代码

TOP

返回列表