NBUOJ 1800 找位置
Description
做操的时间到了,小明在教室还在思考刚刚老师讲的一道题目,当他想通这个题时,同学们都已经在操场上排好队了,他赶快跑到操场上找到自己的班级队伍,希望尽快找到自己的位置,准备做操,小明记得自己是排在第x学号同学的后面。你能不能来帮小明找到自己的位置呢?
Input
第一行输入: n x y(小明不在时队伍的长度、第x同学的学号、小明的学号)
第二行输入:n个同学的学号(6位,第一位可能为0,最后一位可能为X,每个学号后有空格)
Output
n+1个学号的顺序(小明加入队伍后)每个学号后有空格
Sample Input
4 134123 123483
134812 134123 023133 04583X
Sample Output
134812 134123 123483 023133 04583X
知识点
链表的基本操作(创建,插入,删除,输出)
源码
#include<iostream>
#include<cstdio>
#include<cmath>
using namespace std;
typedef struct node{
string id; //学号
struct node* next; //下一位同学
}NODE;
void create_linkedlist(NODE *h,int n) //创建链表,其中n为同学个数
{
NODE *p = h;
NODE *r = new NODE;
p->next = r;
p = r;
for(int i=0;i<n;i++)
{
cin>>p->id;
if(i==n-1)
{
p->next = NULL;
break;
}
r = new NODE;
p->next = r;
p = r;
}
}
void print_linkedlist(NODE *h,int n) //输出链表,其中n为小明插入后的同学个数
{
NODE *p = h->next;
for(int i=0;i<n;i++)
{
cout<<p->id<<" ";
p=p->next;
}
cout<<endl;
}
void insert_linkedlist(NODE *h,string s,string n) //在某同学后插入小明,s为某同学的学号,n为小明学号
{
NODE *p = h->next;
NODE *r;
while(p)
{
if(p->id == s)
{
r = new NODE;
r->id = n;
r->next = p->next;
p->next = r;
break;
}
p=p->next;
}
}
int main()
{
NODE *h;
int n;
string s1,s2;
h = new NODE;
scanf("%d",&n);
cin>>s1>>s2;
create_linkedlist(h,n);
insert_linkedlist(h,s1,s2);
print_linkedlist(h,n+1);
return 0;
}