魔术师发牌问题

魔术师发牌问题

问题描述:
手中有同色扑克十三张(1~13),背面朝上,翻开第一张为1,将其放在桌面,对于剩下的12张牌,将第一张放在牌底,第二张翻开为2,将2放在桌面,对于手中剩下的11张牌,第一张放在牌底,第二张放在牌底,第三张翻开为3,依次类推,求牌的排列顺序。
在这里插入图片描述
解决思路:
需要求排列顺序,链表初始数据肯定为空,需要向链表中填写数据,那么填写了数据的结点就应被翻开,并置于桌面,说明这些结点不参与循环,因此可以得知,参与循环的只是空结点。
那么就可以将判定条件设置为判断该结点是否为空,如果为空,则计数器加一,到达目标结点时,填写数据,否则指向下一个空结点,直至所有数据填写完毕。
代码如下:

package List;

public class Magic {
    public Node root;
    public Node rnode;
    public void Magic_init(){
        root=new Node();
        root.next=root;
        rnode=new Node();
        rnode.next=root;
        for (int i=1;i<=13;i++) {
           Node node=new Node();
           node.setData(null);
           node.next=root;
           rnode.next.next=node;
           rnode.next=node;

        }
        rnode.next.next=root.next;

    }
    public void Mageic_print(){
    //pnode指向的是添加数据的位置
        Node pnode=new Node();
        pnode.next=root;
        int i=1,j=1;
        while (i<=13){
            while (j<=i){
                if(pnode.next.next.getData()==null){
                    j++;
                }
                pnode.next=pnode.next.next;
            }
            pnode.next.setData(i);
            j=1;
            i++;
        }
        Node pnode1=new Node();
        //初始化指向头结点,若下节点不为尾结点则输出下结点
        pnode1.next=root;
        while (pnode1.next.next!=rnode.next){
            System.out.print(pnode1.next.next.getData()+",");
            pnode1=pnode1.next;
        }
        //尾结点独立输出
        System.out.println(rnode.next.getData());
    }
    public  static void main(String[] args){
        Magic ma=new Magic();
        ma.Magic_init();
         ma.Mageic_print();
    }
}

运行结果:
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值