耒阳一中 2022-12-24 17:32 采纳率: 81.3%
浏览 62
已结题

嗯C语言用链表编程。。

```
#include <stdio.h>
#include<malloc.h>
#include <stdlib.h>
typedef struct Node
{
int data;
struct Node* next;
}Node, LinkList; //循环单链表
Node
 IntCLinkList()
{
    int n, i;
  LinkList head, tail, temp;
  printf("输入n:");
   scanf("%d", &n);
   tail = head = NULL;
   for (i = 1; i <= n; i++)
{
        temp = (Node*)malloc(sizeof(Node));//开辟新节点
        temp->data = i;//给节点的值域赋值成i的值
       if (head == NULL)//空链表
{
 head = temp;
}
else
{
tail->next = temp;
  }
tail = temp;
}
tail->next = head; //指向头,形成环
return head;
}
int main()
{
LinkList q = NULL;
LinkList p = IntCLinkList();
int m;//循环变量
int i = 1;//起始位置
int j = 3;//开始遍历的位置
printf("请输入开始循环的m值为:");
scanf("%d", &m);
printf("出队列的位置为: ");
while (p->next != p)
{
  while (j > 1)//指针走到开始遍历位置
{
q = p;
p = p->next;
  --j;
}
q = p;
p = p->next;
i++;
if (i == m)
{
printf("  %d ", p->data);
q->next = p->next;
free(p);
p = q->next;
i = 1; //重新计数    
}
}
printf("\n");
printf(":%d", p->data);
free(p);return 0;
}

```代码要求和代码如上图。嗯,输入13应该。但是我现在输出的是1

  • 写回答

4条回答 默认 最新

  • 会修bug的猫 2022-12-24 23:07
    关注
    
    #include <stdio.h>
    #include<malloc.h>
    #include <stdlib.h>
    typedef struct Node
    {
        int data;
        struct Node* next;
    }Node, *LinkList; //循环单链表
    Node* IntCLinkList()
    {
        int n, i;
        LinkList head, tail, temp;
        scanf("%d", &n);
        tail = head = NULL;
        for (i = 1; i <= n; i++)
        {
            temp = (Node*)malloc(sizeof(Node));//开辟新节点
            temp->data = i;//给节点的值域赋值成i的值
            if (head == NULL)//空链表
            {
                head = temp;
            }
            else
            {
                tail->next = temp;
            }
            tail = temp;  //尾指针指向新的节点; 
        }
        tail->next = head; //指向头,形成环
        return head;
    }
    int main()
    {
        LinkList q = NULL;
    
    
        LinkList p = IntCLinkList();
        int m=3;//循环变量
        int i = 1;//起始位置
        int j = 1;//开始遍历的位置
        while (p->next != p)
        {
            while (j > 1)//指针走到开始遍历位置
            {
                q = p;
                p = p->next;
                --j;
            }
            q = p;
            p = p->next;
            i++;
            if (i == m)
            {
                q->next = p->next;
                free(p);
                p = q->next;
                i = 1; //重新计数    
            }
        }
        printf("The last one is:%d", p->data);
        free(p);
        return 0;
    }
    
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(3条)

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 12月25日
  • 已采纳回答 12月25日
  • 修改了问题 12月25日
  • 修改了问题 12月24日
  • 展开全部

悬赏问题

  • ¥15 HFSS 中的 H 场图与 MATLAB 中绘制的 B1 场 部分对应不上
  • ¥15 如何在scanpy上做差异基因和通路富集?
  • ¥20 关于#硬件工程#的问题,请各位专家解答!
  • ¥15 关于#matlab#的问题:期望的系统闭环传递函数为G(s)=wn^2/s^2+2¢wn+wn^2阻尼系数¢=0.707,使系统具有较小的超调量
  • ¥15 FLUENT如何实现在堆积颗粒的上表面加载高斯热源
  • ¥30 截图中的mathematics程序转换成matlab
  • ¥15 动力学代码报错,维度不匹配
  • ¥15 Power query添加列问题
  • ¥50 Kubernetes&Fission&Eleasticsearch
  • ¥15 報錯:Person is not mapped,如何解決?