C语言循环链表解决约瑟夫问题

本文介绍了如何使用C语言构建单循环链表解决约瑟夫问题。首先讨论了循环链表是否需要头节点的问题,然后讲解了单循环链表的构建方法,以及如何在链表中找到指定位置并删除节点。在处理删除头结点的特殊情况时,文章提到了可能遇到的bug,并给出了修正方法。最后,作者分享了相关的代码实现。
摘要由CSDN通过智能技术生成

最近学习数据结构,需要用单循环链表解决约瑟夫问题,遇到了一些困难,记录一下。
1。构建的链表是否应该有头节点?
对于普通的单链表,我们设置头节点会带来很多方便,但是对于循环链表,因为我们要进行循环,但是我们不希望头节点加入进来,因此,我们最好是构建不含头结点的链表。
2.单循环链表的构建。
由于之前构建的链表是单链表,在构建循环链表时,尾节点与头指针的相连的方法。

List* creatList()
{
    int i = 0,data = 0;
    List* pHead = NULL,*pEnd = NULL,*pNew = NULL;
    for(i=0; i<5; i++)
    {
        pNew = (List*)malloc(sizeof(List));
        if(NULL == pNew)
        {
            printf("分配内存失败");
        }
        if(NULL == pHead)
        {
            pHead = pNew;
        }
        else
        {
            pEnd->pNext = pNew;
        }
        pEnd = pNew;
        printf("请输入节点元素的值:");
        scanf("%d",&data);
        pNew->data = data;
        length++;
    }
    pNew->pNext = pHead;//将尾节点的next域指向链表头
    return p
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值