Go循环单链表解决约瑟夫环问题

2018-04-16  本文已影响7人  addin_gao
package main

import "fmt"

type Node struct {
    data int
    next *Node
} 
//创建一个尾连首的链
func initLoop () *Node{
    first := new(Node)
    first.next = first
    return first
}
func (n *Node)Maps (){
     first := n
     fmt.Println("Maps start---------------")
     for n.next != first{
        fmt.Print(n.data,"\t")
        n = n.next
     }
     fmt.Println(n.data)
}
func (n *Node)Appends (data int){
    if n.data == 0{
        n.data = data
        return
    }
    first := n
    temp :=&Node{data,nil}
    for {
        if n.next == first{
            temp.next = first
            n.next =temp
            return
        }
        n = n.next
    }
}
func main(){
    li := initLoop()
    for i:=0;i<41;i++{
        li.Appends(i+1)
    }
    li.Maps() //1   2   3   4   5
    num :=1;
    for li.next !=li{
        num++
        if num % 3 == 0{
            fmt.Print(li.next.data,">>") // 3>>1>>5>>2>>
            li.next = li.next.next
            num++
        }
        li = li.next
    }
    fmt.Println(li)  //&{4 0xc42000e200} 最后留下第四位
}
上一篇下一篇

猜你喜欢

热点阅读