前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >golang数据结构之用循环链表解决约瑟夫环问题

golang数据结构之用循环链表解决约瑟夫环问题

作者头像
西西嘛呦
发布2020-08-26 14:57:41
4110
发布2020-08-26 14:57:41
举报

josephu.go

package link

import (
    "fmt"
)

type Kid struct {
    ID   int
    next *Kid
}

func AddKid(num int) *Kid {
    first := &Kid{}
    cur := &Kid{}

    if num < 1 {
        fmt.Println("不合法")
        return first
    }
    for i := 1; i <= num; i++ {
        kid := &Kid{
            ID: 1,
        }
        if i == 1 {
            first = kid
            cur = kid
            cur.next = first
        } else {
            tmpKid := &Kid{
                ID: i,
            }
            cur.next = tmpKid
            cur = tmpKid
            cur.next = first

        }
    }
    return first
}

func ShowKid(first *Kid) {
    if first.next == nil {
        fmt.Println("链表已空")
    }
    cur := first
    for {
        fmt.Printf("小孩编号:%d\n", cur.ID)
        if cur.next == first {
            break
        }
        cur = cur.next
    }
}
func Play(first *Kid, start int, count int) {

    if first.next == nil {
        fmt.Println("空链表")
        return
    }
    tail := first
    for {
        //到最后一个节点了
        if tail.next == first {
            break
        }
        tail = tail.next
    }
    //删除就以frst为主,让first移动到要删除的位置
    for i := 1; i <= start-1; i++ {
        first = first.next
        tail = tail.next
    }
    //开始数,然后进行删除
    for {
        for i := 1; i <= count-1; i++ {
            first = first.next
            tail = tail.next
        }
        fmt.Printf("编号为:%d  的出列\n", first.ID)
        first = first.next
        tail.next = first
        if tail == first {
            break
        }
    }
    fmt.Printf("编号为:%d  的出列\n", first.ID)
}

main.go

package main

import "go_code/data_structure/link"

func main() {

    first := link.AddKid(20)
    link.ShowKid(first)
    link.Play(first, 1, 3)
}

运行结果:

f:\goproject\src\go_code\data_structure>go run main.go 小孩编号:1 小孩编号:2 小孩编号:3 小孩编号:4 小孩编号:5 小孩编号:6 小孩编号:7 小孩编号:8 小孩编号:9 小孩编号:10 小孩编号:11 小孩编号:12 小孩编号:13 小孩编号:14 小孩编号:15 小孩编号:16 小孩编号:17 小孩编号:18 小孩编号:19 小孩编号:20 编号为:3 的出列 编号为:6 的出列 编号为:9 的出列 编号为:12 的出列 编号为:15 的出列 编号为:18 的出列 编号为:1 的出列 编号为:5 的出列 编号为:10 的出列 编号为:14 的出列 编号为:19 的出列 编号为:4 的出列 编号为:11 的出列 编号为:17 的出列 编号为:7 的出列 编号为:16 的出列 编号为:8 的出列 编号为:2 的出列 编号为:13 的出列 编号为:20 的出列

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2019-12-10 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档