以下程序是朋友帮写的,编译测试是正确的,可有2个问题(已加粗)不明白.
#include<stdio.h>
#include<stdlib.h>
int main(void)
{
int *Array;
int t,n,m,i,j,k,x;
struct jose { int data;
int numth;
struct jose *next;
}Node;
struct jose *head,*q,*p,*tempe,*temp,*T;
head = NULL;
printf("Input the number of people:\n");
scanf("%d",&n);
Array = (int*)malloc(sizeof(int) * n );
for( i = 0; i < n; i++)
{ scanf("%d\n",&Array[i]);
if (!head){
head = (struct jose*)malloc( sizeof(*head));
p = head;
p -> data = Array[i];
p -> numth = i + 1;
p -> next = head ;
}
else{
q = (struct jose*)malloc( sizeof(*q));
q -> data = Array[i];
q -> numth = i + 1;
q -> next = p -> next;
p -> next = q;
p = q;
}
};
printf("Input the code-num(o<=m<=20):\n");
do{
scanf("%d",&m);
}while(m<0||m>20);
tempe = p;
for (t = 0 ;t < n;t++)
{ for (j = 1;j < m;j++)
tempe = tempe -> next;
printf("%d",tempe -> next -> numth);
m = tempe -> next-> data;
T = tempe -> next;
tempe -> next = T ->next;
free(T);
}
}
第一个printf应该是在输入M以前出现,为什么编译后是在输入M后出现?
第二个:本身此时循环链表的P是指向最后输入的结点的,而for语句为什么是从后往前数了m-1位?
----------------解决方案--------------------------------------------------------