高手看下这个程序(猴子选大王)

current=head;/*使current指向循环链表的最后一个结点*/这一句明明是current指向头结点为什么注释是那样?程序如下:structlistNode{... current=head; /*使current指向循环链表的最后一个结点*/

这一句明明是current指向头结点为什么注释是那样?

程序如下:
struct listNode{
int data;
struct listNode *link;
};

typedef struct listNode LISTNODE;
typedef LISTNODE * LISTNODEPTR;/*LISTNODEPTR:指向LISTNODE指针*/

/*创建循环链表,容纳n个猴子。返回指向链表头结点的指针*/
LISTNODEPTR createList(int m)
{
LISTNODEPTR head=NULL,tail,current;
int i;
for(i=1;i<=m;i++){
current=(LISTNODEPTR)malloc(sizeof(LISTNODE));
current->data=i;
current->link=NULL;

if(head==NULL){/*若是作为头结点*/
head=current;
tail=current;
}
else{/*将结点追加到链表末尾*/
tail->link=current;
tail=current;
}
}
tail->link=head;/*形成循环链表*/
return head;
}
void selectKing(LISTNODEPTR head,int n)/*n>=2*/
{
LISTNODEPTR prePtr=NULL,current;
int i;
i=0;
/*使current指向循环链表的最后一个结点*/
current=head;
while(current->link!=head)
current=current->link;

while(current!=current->link){
/*往后数一个猴子*/
prePtr=current;
current=current->link;
i++;

/*若数到n,则淘汰current指向的猴子*/
if(i%n==0){
/*从head指向链表中拆下current指向的结点*/
prePtr->link=current->link;
current->link=NULL;

current=prePtr;
}
}
printf("大王的编号是:%d\n",current->data);
free(current);
}
那些我省略了 我只想问“这一句明明是current指向头结点为什么注释是那样?”
这句 current=head; /*使current指向循环链表的最后一个结点*/
主函数
int main(int argc, char *argv[])
{
LISTNODEPTR head=NULL;
int i,m;
cout<<"input the amount of monkeys m=";
cin>>m; /*猴子个数*/
head=createList(m);/*创建循环链表*/
printf("input the monkeys' number(n<m) n=");
scanf("%d",&i); /*n=3,表示每次数到3的猴子出局*/
selectKing(head,i);/*选大王。head1指向循环链表。head2指向由淘汰猴子组成地链表*/
return 0;
}
展开
 我来答
qizhi0119
2008-07-01 · TA获得超过357个赞
知道小有建树答主
回答量:510
采纳率:0%
帮助的人:272万
展开全部
首先,要引二个头文件
#include <stdio.h>//标准输入输出什么的
#include <stdlib.h>//malloc free
其次,
你这个没有主函数吧?
一个C程序一定要有一个主函数的.是程序的入口.
*******************************************
循环链表的结尾是自己设定的,以此题的话,由于插入的时候都是从先到后,所以,最后的结点的下一个结点就是头结点,所以,可以将头结点设置为结尾,从头开始走,如果当前的结点的下一个结点等于头结点说明此链表走完一圈,即结束.楼主可以画图帮助理解一下.
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式