Golang circular list: Joseph problems

main Package 

Import (
"FMT"
)

// child
type struct {Boy
ID uint
Next Boy *
}
// game
type game struct {
head Boy *
}
// for initializing the game structure
FUNC newGame (NUM uint) * {game
game : = new new (Game)
game.createBoy (num)
return Game
}
// create a child num enclose a circular linked list
FUNC (Game * Game) createBoy (num uint) {
var I uint
var Boy TEMP *
IF num == 0 { // 0 NUM is not created
return
}
IF game.head = nil {!
return
}
for I =. 1; I <= NUM; I ++ {
IF game.head == {nil// If the head to create a first boy is nil
game.head = {& boy
ID: I,
}
TEMP = game.head
temp.next = game.head
} the else { // Add boy
temp.next = {& boy
ID: I ,
Next: game.head,
}
TEMP = temp.next
}
}
}
// circular linked list output
FUNC (Game * Game) ShowBoy () {
TEMP: = game.head
IF TEMP nil == {
fmt.Println ( "null" )
return
}

for {
fmt.Printf ( "No children% D = -> \ n-", temp.id)
IF temp.next game.head = {!
TEMP = temp.next
}else{
break
}
}
}
//开始游戏
func (game *game)PlayGame(start uint,num uint) *boy{
if game.head==nil||start==0||num==0{
return nil
}
var i uint
for i=1;i<start;i++{//找到start的位置
game.head=game.head.next
}

for{
for i=1;i<num-1;i++{
game.head=game.head.next
}
if game.head==game.head.next{//判断是否只剩下一个boy
return game.head
}
fmt.Println(game.head.next,"出圈")
game.head.next=game.head.next.next
game.head=game.head.next
}
}

func main() {
game:= NewGame(12)
game.ShowBoy()
game.PlayGame(2,3)
game.ShowBoy()
}

Guess you like

Origin www.cnblogs.com/blog1598558660/p/12461953.html