魔术师发牌问题(单向循环队列)

题目描述:
在这里插入图片描述题目分析:
该题就是从1开始到13,从头结点开始,然后每到一个数,从当前位置开始为0,开始数到当前数,并且当前位置就为该牌。

解题步骤:
1.定义内部类结点,结点数据域内存储牌的点数
2.创建13个结点空间的单项循环链表
3.利用for循环将点数依次放入相应位置
4.最后输出该牌的顺序
在这里插入图片描述完整代码:

package Ds02.动态链表;

public class MagicPoker {
    private Node head;
    private Node rear;
    private int size;
    public MagicPoker(){
        //创建一个新的里面没有数据的单项循环链表,由一系列结点组成
        head=new Node();//先创建一个头结点,然后根据头结点创建一系列结点
        rear=head;
        rear.next=head;
        for(int i=2;i<=13;i++){
            Node n=new Node();
            n.next=rear.next;
            rear.next=n;
            rear=rear.next;
        }
        size=13;
    }
    public void showPoker(){
        Node virtulHead=new Node();//创建的为虚拟头结点
        virtulHead.next=head;//虚拟头结点后面为真实头结点
        Node p=virtulHead;
        for(int i=1;i<=13;i++){//点数的循环
            for(int j=0;j<i;){
                if(p.next.number==0){
                    p=p.next;
                    j++;
                }else{
                    p=p.next;
                }
            }
            p.number=i;
        }
        p=virtulHead;
        for(int i=1;i<=13;i++){
            p=p.next;
            System.out.println(p.number+" ");
        }
    }
    private class Node{
        int number;
        Node next;
        public Node(){ }
        public Node(int number,Node next){
            this.number=number;
            this.next=next;
        }
    }
}

发布了49 篇原创文章 · 获赞 4 · 访问量 897

猜你喜欢

转载自blog.csdn.net/weixin_45404784/article/details/103586707