魔术师发牌问题--java实现

package com.wyl.linklist;
/**
 **问题名称:魔术师发牌问题 
 *问题描述:魔术师手里一共有13张牌,全是黑桃,1~13. 
 *********魔术师需要实现一个魔术:这是十三张牌全部放在桌面上(正面向下), 
 ********第一次摸出第一张,是1,翻过来放在桌面上。 
 ******第二次摸出从上往下数第二张,是2,翻过来 放在桌面上,(第一张放在最下面去,等会儿再摸), 
 *****第三次摸出从上往下数第三张,是3,翻过来放在桌面上,(第一张和第二张 放在最下面去,等会儿再摸) 
 ***  以此类推 最后一张就是13 
 *
 * 方法:
 * 1、创建一个长度为13的单向循环链表,链表中值全部存0
 * 2、遍历链表进行修改值
 * @author wyl
 *
 */
public class MagicCord {

    private Node head;  //定义链表的头结点
    
    /**
     * 创建链表中的Node类
     */
    class Node{
        private Integer data;
        private Node next;
        
        public Node(){
            
        }
        public Node(Integer data){
            this(data, null);
        }
        public Node(Integer data, Node next) {
            this.data = data;
            this.next = next;
        }
        
        public Integer getData() {
            return data;
        }
        public void setData(Integer data) {
            this.data = data;
        }
        public Node getNext() {
            return next;
        }
        public void setNext(Node next) {
            this.next = next;
        }
    }
    /**
     * 构造函数中直接初始化长度为13的循环链表
     * 第一个节点的值默认为1 
     */
    public MagicCord(){
        head = new Node(1);
        Node p = head ;
        int i = 1;
        while(p.next == null && i < 13){
            Node newNode = new Node(0);
            p.next = newNode;
            p = p.next;
            i++;
        }
        p.next = head; //构建循环链表
    }
    //打印循环链表
    public void print(){
        Node p = head;
        int i = 0;
        while(i++<13){
            System.out.print(p.data + "、");
            p = p.next ;
        }
    }
    
    //循环修改节点的值
    public void magic(){
        int i = 2; //从2开始存数字到13
        Node p = head; //指针p指向head,用来控制每次指针移动的下一个位置
        for(;i<=13;i++){
            for(int j = 0; j<i; j++){
                p = p.next;
                if(p.data != 0){
                    j--;
                }
            }
            p.data = i;
        }
    }
    
    public static void main(String[] args) {
        MagicCord magicCord = new MagicCord();
        magicCord.print();
        magicCord.magic();
        System.out.println();
        magicCord.print();
    }
}

 

posted @ 2017-07-18 16:35  Miss_wang  阅读(754)  评论(0编辑  收藏  举报