链表下的约瑟夫环

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了链表下的约瑟夫环相关的知识,希望对你有一定的参考价值。

首先把上面的双向链表改为循环双向链表

public class MyLinkedList2<E> {

    /**
     * 第一个
     */
    transient MyNode first = null;
    /**
     * 最后一个
     */
    transient MyNode last = null;

    transient int size =0;

    Object[] obs = null;

    MyLinkedList2(Object[] obs){
        this.obs = obs;
        MyNode preNode = null;
        for (int i = 0; i < obs.length; i++) {
            MyNode succ = new MyNode(preNode,(E)(obs[i]),null);

            if(preNode!=null){
                preNode.next=succ;
            }else {
                first=succ;
            }
            preNode = succ;
            last=succ;
            size++;
        }

        last.next=first;
        first.pre=last;

    }

    class MyNode{
        E w;
        MyNode pre = null;
        MyNode next=null;

        public MyNode(MyNode pre,E w, MyNode next) {
            this.w = w;
            this.next = next;
            this.pre=pre;
        }
    }

    public int length(){
        return size;
    }

}

  编码实现约瑟夫环

/**
 * 环形链表解决约瑟夫环问题(间隔为3)
 */
public class Test3 {

    public static final int INVALID_DATA=-1;

    public static final int SPACE=3;

    public static void main(String[] args) {

        Object[] obs = new Object[10];
        for (int i = 0; i < obs.length; i++) {
            obs[i]=i;
        }


        MyLinkedList2.MyNode node = new MyLinkedList2(obs).first;
        int point = 0;
        while (node.next!=null){

            if((int)node.w != INVALID_DATA){
                if(point==SPACE){
                    System.out.println(node.w);
                    //INVALID_DATA
                    node.w=INVALID_DATA;
                    point=0;

                }else {
                    point++;
                }
            }
            node=node.next;
        }
    }
}

  

以上是关于链表下的约瑟夫环的主要内容,如果未能解决你的问题,请参考以下文章

java代码实现经典算法约瑟夫环(环形链表法)

JAVA实现: 使用单链表实现约瑟夫环(约瑟夫问题)

简洁明了!Java实现单向环形链表以解决约瑟夫环Josepfu问题

:链表 -- 单向环形链表约瑟夫问题(约瑟夫环)

约瑟夫环问题

单向环形链表解决Josephu(约瑟夫)问题