问题描述 :
使用带头结点的单链表编程:
一群学生排成一行,输入一个学号,请确定该学号学生所在的位置。
输入说明 :
第一行输入学生信息:
第一个整数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;
head = new ListNode;
p1 = head;
int cnt,num; //学生个数和学号
cin>>cnt;
for(int i = 0; i < cnt; i++) {
cin>>num;
p1 = new ListNode;
p1->num = num;
p2->next = p1;
p2 = p1;
}
p2->next = NULL;
return head;
}
//遍历链表
void displayLink(ListNode *head) {
ListNode *p = head;
cout<<"head-->";
while(p != NULL) {
cout<<p->num<<"-->";
p = p->next;
}
cout<<"tail"<<endl;
}
//根据学号找学生是第几个
void search(ListNode *head,int num) {
int i = 1;
ListNode *p = head->next;
while(p != NULL) {
if(p->num == num) {
break;
}
p = p->next;
i++;
}
if(p != NULL) {
cout<<i<<endl;
}
else {
cout<<"no"<<endl;
}
}
int main() {
struct ListNode *head;
int num;
head = createByTail();
while(cin>>num) {
search(head,num);
}
return 0;
}