0¡Üs public Josephus(int n, int s, int d) { if (n<=0 || s<0 || s>=n || d<=0 || d>=n) throw new java.lang.IllegalArgumentException(\£¬s=\£¬d=\//ÎÞЧ²ÎÊýÒì³£ System.out.print(\£¬\ SinglyList for (int i=n-1; i>=0; i--) list.insert(0, (char)('A'+i)+\ //µ¥Á´±íÍ·²åÈ룬O(1) System.out.println(list.toString()); //Êä³öµ¥Á´±íµÄÃèÊö×Ö·û´®£¬O(n) //ÒÔÏÂÇó½âJosephus»· Node for (int j=0; front!=null && j front = front.next; while (n>1) //¶àÓÚÒ»¸öÔªËØÊ±Ñ»· { for (int j=1; j { front = front.next; if (front==null) //ʵÏÖÑ»·¼ÆÊý front = list.head.next; } if (front.next==null) //ÈôfrontÖ¸Ïò×îºóÒ»¸ö½áµã£¬Ôòɾ³ýµÚ0¸ö½áµã front = list.head; System.out.print(\ɾ³ý\£¬\ - 13 - front.next = front.next.next; //ɾ³ýfrontµÄºó¼Ì½áµã£¬°üÀ¨Í·¡¢Öмä/βɾ³ý n--; System.out.println(list.toString()); } System.out.println(\±»ÉâÃâÕßÊÇ\ //get(0)»ñµÃÔªËØ£¬O(1) } Ö´ÐÐnew Josephus(5,0,3)£¬µ¥Á´±íµÄ±ä»¯¹ý³ÌÈçͼ2.7Ëùʾ¡£ datanextheadABfrontCDE¡Ä(a) ´ÓA¿ªÊ¼¼ÆÊý£¬É¾³ýC½áµã£»frontÖ¸ÏòC½áµãµÄǰÇýB£¬Öмäɾ³ýfrontheadABDE¡Ä(b) ´ÓD¿ªÊ¼¼ÆÊý£¬É¾³ýA£¬Ñ»·¼ÆÊý£»Í·É¾³ýfrontheadBDE¡Ä (c) ´ÓB¿ªÊ¼¼ÆÊý£¬É¾³ýE£»Î²É¾³ýfrontheadBD¡ÄheadD¡Ä(e) Ò»¸ö½áµãµÄµ¥Á´±í(d) ´ÓB¿ªÊ¼¼ÆÊý£¬É¾³ýB£¬Ñ»·¼ÆÊýͼ2.7 ʹÓõ¥Á´±íÇó½âJosephus(5,0,3)»·ÎÊÌâµÄÖ´Ðйý³Ì ¡¾Ï°2.2¡¿ ¼¯ºÏ²¢ÔËË㣬µ¥Á´±íÉ±´µÄÓ¦Óᣠ±¾ÌâÄ¿µÄ£º¢Ù µ¥Á´±í×÷Ϊ·½·¨²ÎÊýÓë·µ»ØÖµ£¬´«µÝ¶ÔÏóÒýÓã»¢Ú µ¥Á´±íÉ±´Ó¦Óᣠµ±¶ÔÏó×÷Ϊ·½·¨µÄ²ÎÊý»ò·µ»ØÖµÊ±£¬²ÎÊý´«µÝÔÔòͬ¸³Öµ£¬¡°ÒýÓòÎÊý´«µÝ¶ÔÏóÒýÓá±£¬¼´ÐÎʽ²ÎÊý»ñµÃʵ¼Ê²ÎÊýµÄ¶ÔÏóÒýÓᣠSinglyList //ÔÚthisµ¥Á´±íÖ®ºóÁ¬½ÓlistµÄËùÓнáµã£¬¼¯ºÏ²¢£»ÉèÖÃlistΪ¿Õ£¬O(n) public void concat(SinglyList - 14 - Node while (rear.next!=null) //ѰÕÒthisµ¥Á´±íµÄ×îºóÒ»¸ö½áµã rear = rear.next; rear.next = list.head.next; //β²åÈëlistµ¥Á´±í list.head.next=null; //ÉèÖÃlistΪ¿Õ£¬·ñÔòÂß¼´í¡£·½·¨ÌåÄڿɸıä²ÎÊýlistÒýÓõĵ¥Á´±í } //¸´ÖÆlistËùÓнáµã²åÈëµ½thisµ¥Á´±íÖ®ºó£¬¼¯ºÏ²¢£¬²»¸Ä±älist public void addAll(SinglyList this.concat(new SinglyList } //·µ»Ø¸´ÖÆthisºÍlistºÏ²¢Á¬½ÓµÄµ¥Á´±í£¬²¢¼¯£¬²»¸Ä±äthisºÍlist public SinglyList SinglyList result.addAll(list); return result; //·µ»ØresultÒýÓõĵ¥Á´±í£¬ÊÍ·Åresult±äÁ¿ } Éè´´½¨µ¥Á´±ílistaºÍlistb£¬·Ö±ðµ÷ÓÃÉÏÊö·½·¨£¬Ëã·¨ÃèÊöÈçͼ2.14Ëùʾ¡£ ʵ¼Ê²ÎÊýÐÎʽ²ÎÊýheadlistathislistbdatanexta¡Äxby¡Ärearc list(a) µ÷ÓÃlista.concat(listb)£¬´«µÝ¶ÔÏóÒýÓã¬this¡¢list·Ö±ðÒýÓÃlista¡¢listb¶ÔÏó£» ÔÚthisÖ®ºóÁ´½Ólist£¬ÔòÁ½Ìõµ¥Á´±í¹²ÓÃx¡¢y½áµã£¬Âß¼´í£»ÉèÖÃlistΪ¿Õ- 15 - listathislistblistheadax¡Äxbyy¡Ä¡Ärearc (b) µ÷ÓÃlista.addAll(listb)£¬listÉ±´listb£¬thisÁ¬½ÓµÄÊÇlist¡£ÊÍ·Ålist£¬²»¸Ä±älistbheadlistathisresultlistblist¡Äaaxxbbyy¡Ä¡Äcc¡Ärear (c) µ÷ÓÃlista.union(listb)£¬result£¨É±´this£©Á¬½Ólist£¨É±´listb£©£¬ ·µ»ØresultÒýÓõĵ¥Á´±í¡£ÊÍ·ÅresultºÍlist£¬²»¸Ä±älista¡¢listbͼ2.8 ¼¯ºÏ²¢ÔËË㣬µ¥Á´±íÉ±´µÄÓ¦Óà 4. Ñ»·µ¥Á´±í ¡¾Ë¼¿¼Ìâ2-10¡¿ÄÜ·ñʹÓÃÒÔÏÂÓï¾ä´´½¨Ñ»·µ¥Á´±íµÄÍ·½áµã£¿ÎªÊ²Ã´£¿ head = new Node 2.3.2 Ë«Á´±í 1. Ë«Á´±í½áµã ϰ2-11 DoubleNodeÀàÄÜ·ñÉùÃ÷ÈçÏ£¬¼Ì³Ðµ¥Á´±í½áµãÀàNode£¿ÎªÊ²Ã´£¿ public class DoubleNode { public DoubleNode } - 16 - ¡¾´ð¡¿²»ÄÜ¡£¢Ù ËäÈ»¸ÃÉùÃ÷ûÓÐÓï·¨´í£¬µ«ÓÐÓïÒå´í£¬ÒòΪ´Ó¸¸Àà¼Ì³ÐÀ´µÄnextÀàÐÍΪNode public class DoubleNode { public T data; public Node public DoubleNode ´Ë´¦ÐèÒªnextÖ¸ÏòË«Á´±í½áµã£¬ÀàÐÍÊÇDoubleNode ¢Ú ËäÈ»´ÓÓï·¨ÉÏDoubleNode public class DoubleNode public DoubleNode public data,DoubleNode { // super(data,next); //ÓïÒå´í£¬¸³Öµsuper.next£¨ÀàÐÍΪNode super(data,null); this.next = next; //¸³Öµthis.next£¨ÀàÐÍΪDoubleNode this.prev = prev; } } ?×¢Ò⣺´ËʱDoubleNodeÀàÓÐÁ½¸önext£¬Ê¹ÓÃthisºÍsuperÒýÓÿÉÇø·ÖÁ½Õߣ¬´Ó¸¸Àà¼Ì³ÐÀ´µÄsuper.nextÀàÐÍΪNode - 17 -