C或C++解决约瑟夫换问题
#include <iostream>using namespace std;
#define error 0
typedef int Status;
typedef struct LNode
{
int data;
struct LNode *next;
}LNode,*LinkList;
Status Init_L(LinkList &L,int n)
{
L=(LinkList) malloc(sizeof(LNode));
// L->next=L;
LinkList p=L;
for(int i=n;i>0;i--)
{
p=(LinkList) malloc(sizeof(LNode));
p->data=i;
p->next=L->next;
L->next=p;
}
return 0;
}
Status show(LinkList &L,int n)
{
LinkList p=L->next;
while(p)
{
cout<<p->data<<' ';
p=p->next;
}
cout<<endl;
return 0;
}
Status delete_L(LinkList &L,int n,char &e)
{
if(!L) return error;
LinkList q,p=L;
int i,j;
for(i=1,j=1;i<=n;i++,j++)
{
if(j==3)
{
q=p->next;
p->next=q->next;
e=q->data;
free(q);
n--;
j=1;
}
p=p->next;
}
return 0;
}
void main()
{
int n;
char e;
LinkList L;
cout<<"please input the number of student: ";
cin>>n;
Init_L(L,n);
delete_L(L,n,e);
show(L,n);
}
循环列表的声明在这里有问题,就是我隐去的那部分,网上也有这个问题的代码但他们都是用特定一个变量处理循环问题的,请问我这样解决为什么有错,要怎么改?
追问:我知道,但用这个的话不就成了设置不循环单链表了吗?可是现在是要循环单链表,怎么样才能让表尾的next指针和表头连接上呢?