單鏈表 約瑟夫環問題

2021-10-02 17:12:08 字數 1800 閱讀 2184

分析:

比如由5個節點組成乙個環,從第1個節點開始報數,每報數2個節點刪除乙個節點,單鏈表如下:

(1)設定乙個helper輔助節點,指向最後乙個節點:

(2)因為是從第k個節點開始報數,因此先讓first和helper走k-1步,這樣first節點就指向報數的第乙個節點了,k初始值為1,因此不用向前走

(3)然後開始刪除節點,每次讓helper和first向前走1步,走了m-1步支行,first指向乙個要刪除的節點,第乙個要刪除的節點如下:

(4)讓first=first.next,helper.next=first,則第2個節點刪除:

(5)重複第4和第5步,直到helper等於first時,證明只有最後乙個節點

(6)刪除最後乙個節點

實現:

public

class

josepfu

list.

print()

; list.

josepfu(1

,2);

}}class

circlesinglelinkedlist

else

temp.next = node;

node.next = first;}}

public

void

print()

node temp = first;

while

(temp.next != first)

system.out.

print

(temp.num)

; system.out.

print

(" ");

system.out.

println

("\n---------------");

}//從第k個節點報數,報數m次刪除乙個節點

public

void

josepfu

(int k,

int m)

node helper = first;

//輔助節點

//先讓輔助節點指向最後乙個節點

while

(helper.next != first)

//讓helper和first節點向前走k-1次

for(

int i =

1; i < k; i++

)//當helper等於first的時候,只剩下乙個節點

while

(helper != first)

system.out.

println

(first.num)

; first = first.next;

helper.next = first;

} system.out.

println

(first.num);}

}//節點定義

class

node

}

單鏈表實現約瑟夫環問題

首先我們來了解一下什麼是約瑟夫環 約瑟夫環 約瑟夫環問題 是乙個數學的應用問題 已知n個人 以編號1,2,3.n分別表示 圍坐在一張圓桌周圍。從編號為k的人開始報數,數到m的那個人出列 他的下乙個人又從1開始報數,數到m的那個人又出列 依此規律重複下去,直到圓桌周圍只剩下乙個人。今天用單鏈表實現約瑟...

約瑟夫環 單鏈表

此演算法將頭指標head也進行data賦值 include typedef struct node 定義結構體 linknode,link int main void josephu link head,int n,int k,int m 此演算法將頭指標head賦予data值,以便於迴圈鍊錶結點的...

迴圈單鏈表 Joseph約瑟夫環問題

package com.linkedlist author qw date 2020 8 11 22 02 public class josephcircle 迴圈單鏈表 class circlesinglelinkedlist child cur null 輔助指標,幫助構建迴圈鍊錶 for in...