问题描述: 使用带头结点的单链表编程: 一群学生排成一行,输入一个学号,请确定该学号学生所在的位置。
输入说明: 第一行输入学生信息: 第一个整数n(0<=n<=100),表示共有n个学生,其后有n个整数,表示n个 学生的学号 第二行及以后各行,每行输入一个整数,表示要查找的学生学号。
输出说明: 对于每个要查找的学号,输出一个整数,表示要查找学生的位置。如果共有n个学生,则位置序号为1~n。 如果学生不存在,输出“no”,不包括双引号。每个输出占一行。
输入范例: 12 50 51 52 53 54 49 4 5 10 11 9 12 50 11 12 3
输出范例: 1 10 12 no
#include <iostream> using namespace std; struct ListNode{ int num; struct ListNode *next; }; ListNode *createByTail(){ ListNode *head; ListNode *p1,*p2; int n; cin>>n; head=new ListNode; head->next=NULL; p2=head; int i=0,num; while(i<n&&cin>>num){//尾插法 p1=new ListNode;//创建新节点 p1->num=num; p2->next=p1; p2=p1; i++; } p2->next=NULL; return head; } int Locate(ListNode *head,int num){//寻找当前元素位置,没有则返回0 int count=1; ListNode *p; p=head->next; while(p){ if (p->num==num){ break; } p=p->next; count++; } if(p==NULL){ return 0; }else{ return count; } } int main() { ListNode *head; head=createByTail(); int data; while(cin>>data){ int locate=Locate(head,data); if(locate==0){ cout<<"no"<<endl; }else{ cout<<locate<<endl; } } return 0; }