0
点赞
收藏
分享

微信扫一扫

1395 链表插入II

就是耍帅 2022-01-21 阅读 95

1395 链表插入II

时间限制 : 2000/1000 MS(Java/Others) | 内存限制 :65536/32768 KB(Java/Others)

提交数 : 1189 | 通过数 : 581

题目描述

给定一串数字,然后给定若干插入操作,将操作后的结果输出。

输入要求

第一行:输入一个整数n,表示这串数字有n个(n>=1)。

第二行:输入这n个数字。

第三行:输入一个整数m,表示有m次插入操作。

后面m行:输入a b c1,c2,c3,c4...cb(b项),表示在这串数字当前第a个数字之后插入b个数字,这b个数字分别是c1,c2到cb。(假设链表第一个数字编号为1)

输出要求

输出操作后的结果。每个数字用空格空开

输入样例

3
2 1 3
2
1 5 3 3 3 3 3
2 6 4 4 4 4 4 4

输出样例

2 3 4 4 4 4 4 4 3 3 3 3 1 3
#include<bits/stdc++.h>
using namespace std;
typedef struct S{
	int id;
	struct S *next;
}stu;
stu* init()
{
	stu*p=(stu*)malloc(sizeof(stu));
	p->id=0;
	p->next=NULL;
	return p;
}
void endinsert(stu*head,int date)
{
	stu*p=head;
	while(p->next!=NULL)
	{
		p=p->next;
	}
	stu*q=(stu*)malloc(sizeof(stu));
	q->id=date;
	q->next=p->next;
	p->next=q;
}
void insert(stu*head,int i,int j)
{
	stu*p=head->next;
	int flag=1;
	while(p!=NULL)
	{
		if(flag==i)
		{
			stu*p2=(stu*)malloc(sizeof(stu));
			p2->id=j;
			p2->next=p->next;
			p->next=p2;
		}
		else
		{
			p=p->next;
		}
		flag++;
	}
}
void print(stu*head)
{
	stu*p=head->next;
	int flag=0;
	while(p!=NULL)
	{
		flag++;
		if(flag==1)
		printf("%d",p->id);
		else
		printf(" %d",p->id);
		p=p->next;
	}
	printf("\n");
}
int main()
{
	int n;
	cin>>n;
	stu*head=init();
	for(int i=0;i<n;i++)
	{
		int x;
		scanf("%d",&x);
		endinsert(head,x);
	}
	int x1;
	cin>>x1;
	for(int i=0;i<x1;i++)
	{
    int y,z;
    cin>>y>>z;
    vector<int> a;
    for(int i=0;i<z;i++)
    {
    	int w;
    	cin>>w;
    	a.push_back(w);
	}
	reverse(a.begin(),a.end());
	for(int i=0;i<a.size();i++)
	{
		insert(head,y,a[i]);
	}
    }
	print(head);
	return 0;
 } 
举报

相关推荐

0 条评论