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

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} 最后留下第四位
}
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容