NBUOJ 1800 找位置(链表)

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
#include
#include
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;
}

你可能感兴趣的:(c语言)