zoukankan      html  css  js  c++  java
  • 魔术师发牌问题--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();
        }
    }
  • 相关阅读:
    springboot scheduled多线程
    Oracle sql 小数点前面0不显示
    (转)VIM常用命令集锦
    java 面试题
    关于oracle start with connect by 全表扫描的一点想法
    (转)window.opener方法的使用 刷新父页面
    (转)jQuery “not readonly” selector
    (转)jquery合并单元格
    Java 格式化json为json树
    我的2018
  • 原文地址:https://www.cnblogs.com/studyDetail/p/7201229.html
Copyright © 2011-2022 走看看