#include "stdio.h"
typedef struct listnode
{
int data;
listnode *next;
};
listnode *order(int k,int n)
{
listnode *persion,*head,*p,*q,*h;
p=head=(listnode)malloc(listnode);
for(i=0;i<n-1;i++)
{
q=(listnode)malloc(listnode);
p->next=q;
p = q;
//改过
让p指向尾
}
//p=h;
去掉
h现在什么都不是,你让p指向它干什么
p->next=head;
//一个环就连好了
//head=p;
想干什么
p = head;
for(i=0;i<n;i++)给链表标号
{
p->data=i;
//
p++
链表不是数组
p = p->next;
}
for(j=0;j<k-1;j++)使指针指向第k个
{
head = head->next;
}
return head;
}
void delect(int n,int p,listnode *w)
{listnode *p,*q,*head;
int i = 0 ;
//w=p;
和上面一样,p是空的
q = p = head = w;
for(i=0;i<n-2;i++)
{
q = q->next; 让q指向尾
}
for(i=n;i>1;i--)
{
while(p->data!=p%n)
{
p = p->next;
q = q->next;
}
q->next = p->next;
把p前后两个节点连接
free(p); 释放空间,每个malloc对应一个free
}
printf("%d",p->data);//删除了n-1个,最后剩下一个
}
void main()
{int a,b,p;
listnode *l,*w;
printf("请输入用餐人数:");
scanf("%d",&a);
printf("请输入从第几人开始计数:");
scanf("%d",&b);
printf("请输入p = :");
scanf("%d",&p);
l=order(b,a);
delect(a,p,l);
}
这是我的思路,哪里不对,你自己改改吧,指针的使用要多看啊