链表中查找第n个节点信息节点信息
程序代码:
#include<stdio.h> #include<stdlib.h> //定义节点类型 typedef struct player{ int number; //数据域用来存放节点信息可以有定义多个不同类型的数据信息 char name[20]; struct player*next; //指针域必须是与结构体同类型的指针用来存放下一个节点的地址 }Player; Player*game(int sum); //定义game函数 函数返回类型为结构体类型的指针需要一个sum参数来表示有多少个节点 void print(Player*head,Player*node); //定义输出函数 Player*Find(Player*head,int sum); //定义查找第n个节点信息 int main() { int sum; printf("请输入玩家个数:"); scanf("%d",&sum); //用户输入节点个数 Player*head=NULL,*node; head=game(sum); node=Find(head,sum); print(head,node); return 0; } Player*game(int sum) { int i; Player*head=NULL,*pt,*pre; //定义头节点,过度节点,尾节点 for(i=0;i<sum;i++){ //用循环的方式创建sum个节点 pt=(Player*)malloc(sizeof(Player)); //向系统空间为过度节点申请一个Player结构类型的空间 if(pt!=NULL){ //判断是否成功的向系统空间申请了内存 scanf("%d%s",&pt->number,pt->name); //用户输入节点的数据域(赋值) if(head==NULL){ //head==NULL时说明链表是空链表进行头节点的处理 也可将此条语句改为if(i==0) head=pt; //让头节点的地址指向过度节点的地址 pre=pt; //此时pt既是头节点也是尾节点 } else { //执行else语句的说明链表已经创建好了头节点 pre->next=pt; //将尾节点与过度节点连接起来 pre=pt; //将尾节点的地址指向过度节点的地址(此时pt既是过度节点也是为节点) } } else{ printf("Failed.\n"); exit(0); } } pre->next=NULL; //让尾节点的指针域为空表明链表结束 return head; } //查找第n个节点信息 Player*Find(Player*head,int sum) { int n=1; Player*node=head; printf("请输入需要查找节点的序号:"); scanf("%d",&n); while(n<sum&&node!=NULL){ node=node->next; n++; } return node; } //输出节点信息 void print(Player*head,Player*node) { //遍历输出链表信息 while(head!=NULL){ printf("%d,%s\n",head->number,head->name); head=head->next; } //输出第n个节点信息 printf("the number is %d name is %s\n",node->number,node->name); return; }
问题一:我查找的是第四个节点的信息为什呢输出的第二个节点的信息呢?
问题二://输出第n个节点信息
printf("this player number is %d name is %s\n",node->number,node->name); 我想把这句代码改为printf("the first %d player number is %d name is %s",n,node->number,node->name);但是n在 Player*Find(Player*head,int sum);函数里怎么样把它返回到void print(Player*head,Player*node)函数里面呢