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

来源:百度知道 编辑:UC知道 时间:2024/05/01 05:40:10
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(curr

首先,要引二个头文件
#include <stdio.h>//标准输入输出什么的
#include <stdlib.h>//malloc free
其次,
你这个没有主函数吧?
一个C程序一定要有一个主函数的.是程序的入口.
*******************************************
循环链表的结尾是自己设定的,以此题的话,由于插入的时候都是从先到后,所以,最后的结点的下一个结点就是头结点,所以,可以将头结点设置为结尾,从头开始走,如果当前的结点的下一个结点等于头结点说明此链表走完一圈,即结束.楼主可以画图帮助理解一下.