1. 程式人生 > 實用技巧 >單鏈表應用(3)--迴圈連結串列解決約瑟夫問題

單鏈表應用(3)--迴圈連結串列解決約瑟夫問題

//迴圈列表場景:傳說有這樣一個故事,在羅馬人佔領喬塔帕特後,39 個猶太人與約瑟夫及他的朋友躲到一個洞中,39個猶太人決
    //定寧願死也不要被敵人抓到,於是決定了一個自殺方式,41個人排成一個圓圈,第一個人從1開始報數,依次往
    //後,如果有人報數到3,那麼這個人就必須自殺,然後再由他的下一個人重新從1開始報數,直到所有人都自殺身亡
    //為止。然而約瑟夫和他的朋友並不想遵從。於是,約瑟夫要他的朋友先假裝遵從,他將朋友與自己安排在第16個與
    //第31個位置,從而逃過了這場死亡遊戲 。
    //以下程式碼列印這41個人依次被殺的下標。
    public static void main(String[] args) {
        
//構造迴圈列表 Node first = new Node(0,null); Node pre = first; for(int i = 1; i < 41;i++){ Node middle = new Node(i,null); pre.next = middle; pre = middle; } pre.next = first; Node report = first; //初始化第一個人報數 Integer count = 1; //
報1 Node preReport = null; //上一個人為null while (!report.equals(report.next)){ preReport = report; // 上一個報數的人 report = report.next; //當前報數的人 count++; //繼續報數 if(count == 3){ //當前人報到3,剔除此人 System.out.print(report.t + " "); preReport.next
= report.next; count = 0; } } System.out.println("最後活著的人:" + report.t); } private static class Node<T>{ private T t; private Node next; public Node(T t, Node next) { this.t = t; this.next = next; } }