嗯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


#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;
}

建议参考:https://blog.csdn.net/Victor_psl/article/details/107298245

  1. //这是c++的,你参考一下
    #include
    using namespace std;
    const int N=13;//链表长
    const int STEP=3;//步长
    struct person
    {
    int number;
    person *nextp;
    };
    int main()
    {
    person *head=NULL;//头
    person *tail=NULL;//尾
    person *p;
    for(int i=1;i<=N;i++)
    {
        p=new person;
        p->number=i;
        p->nextp=NULL;
        if(head==NULL) head=p;
        else tail->nextp=p; 
        tail=p;
    
    }
    tail->nextp=head;//首尾连接
    //找出这个数:
    person *phead=head;//头
    person *ptail=tail;//尾
    int n=N;
    while(n!=1)
    {
        for(int i=1;i<STEP;i++)
        {    
            ptail=phead;
            phead=phead->nextp;
        }
        ptail->nextp=phead->nextp;
        delete phead;
        phead=ptail->nextp; 
        n--;
    
    }
    cout<<"这个数是:"<number;
    delete phead;
    }