查找序列元素(链表)
问题描述 :
使用带头结点的单链表编程:
一群学生排成一行,输入一个学号,请确定该学号学生所在的位置。
输入说明 :
第一行输入学生信息:
第一个整数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;//head指向头结点,此时为空链表
p2=head;
int i;
i=0;
while(i!=n)
{
int num;
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)
{
int tag;
tag=1;
ListNode *p;
p=head->next;
while(p)
{
if (p->num == num) break;
p=p->next;
tag++;
}
if(p==NULL){
return 0;
}else{
return tag;
}
}
int main() {
struct ListNode *head;
head=createByTail();
int data;
while(cin>>data){
int tag=Locate(head,data);
if(tag==0){
cout<<"no"<<endl;
}else{
cout<<tag<<endl;
}
}
return 0;
}