C/C++ code
<!-- Code highlighting produced by Actipro CodeHighlighter (freeware) http://www.CodeHighlighter.com/ -->
#include
<
stdio.h
>
#include
<
malloc.h
>
#define
LEN sizeof(struct node)
struct
node {
int
data;
struct
node
*
next; }
*
p,
*
p1,
*
h,
*
r; main() {
void
ysfh(
int
n,
int
k,
int
m);
int
n;
int
k;
int
m; printf(
"
请输入人数n:\n
"
); scanf(
"
%d
"
,
&
n); printf(
"
请输入编号为k的人开始报号的k的值:\n
"
); scanf(
"
%d
"
,
&
k); printf(
"
请输入数到m的那人出列的m的值:\n
"
); scanf(
"
%d
"
,
&
m); ysfh(n,k,m); }
void
ysfh(
int
n,
int
k,
int
m) {
//
建立一个循环链表
for
(
int
i
=
1
;i
<=
n;i
++
) { p
=
(
struct
node
*
)malloc(LEN); p
->
data
=
i;
if
(h
==
NULL) { h
=
p; }
else
{ p1
->
next
=
p; } p1
=
p; } p
->
next
=
h; p
=
h;
//
把指针移动到编号为k的那个人上面
for
(i
=
0
;i
<
k;i
++
) { p1
=
p; p
=
p
->
next; }
//
p1指向了编号为k的那个人
//
找到数到m的那人并且删除
printf(
"
删除的数字:\n
"
);
while
(p1
->
next
!=
NULL)
//
while循环条件肯定有问题,希望高手们看看应该如何写这个条件
{
for
(i
=
0
;i
<
m;i
++
) { r
=
p1; p1
=
p1
->
next; }
//
r指向的是删除那个数
p1
->
next
=
r
->
next; printf(
"
%d
"
,r
->
data); free(r); } printf(
"
最后出列的人是:%d\n
"
,p1
->
data); }