问题描述 :
使用带头结点的单链表编程:
一群学生排成一行,输入一个学号,请确定该学号学生所在的位置。
输入说明 :
第一行输入学生信息:
第一个整数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;
}