卜若的代码笔记-数据结构系列-第八章:链表-循环链表的典型应用:丢手绢

1.算法题目

有一群小屁孩围坐一圈,编号从1排到10。然后主持者丢了一个骰子,1~6,会随机出一个数,比如出了一个3,然后他们就从头开始,数1,2,3,...数到3的人出队,其余人再继续数,直到只剩下两人,那其他人请那两人吃雪糕。问:谁最后一个出队。

 

你看,这个就是一个典型的循环链表的问题。实现过程如下所示,我们定义了一个HankGame表,然后加入了10个小学生,然后循环抽取。

    public static void main(String[] args) throws IOException {
        //定义一个统计表
        HandkerchiefGameTable table = new HandkerchiefGameTable();
        //将数据加载到表中
        for (int i =0;i<10;i++){
            table.add(new IntDoubleDirElement(i));
        }
        
        //进行游戏
        table.traverse();
        //输出排除顺序
        System.out.println(table.removeValue);
    }

来看一下tranverse()函数

这是一个死循环,终止条件是操作的返回值为100,这样我可以一直循环遍历这个循环链表。

然后来看operation

你看,就一直数,数到3,就移除,并且输出这个小盆友的编号,当小于2的时候,就不满足123了嘛!

另外,delete函数重载了一下,实现方式通过获取这个节点的前驱和后继关联起来就就行。

就很简单。下一章里面,我将公布整个链表的类图,并且将源代码上传到博客。

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值