美文网首页
Go循环单链表解决约瑟夫环问题

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

作者: addin_gao | 来源:发表于2018-04-16 17:37 被阅读7次
    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} 最后留下第四位
    }
    

    相关文章

      网友评论

          本文标题:Go循环单链表解决约瑟夫环问题

          本文链接:https://www.haomeiwen.com/subject/dybekftx.html