list模板题

题面:

设计一个int类型的动态链表L,L中有一个代表当前位置的光标,支持下列操作:
insert(x): 在光标前面插入元素x,插入后光标指向新插入的元素x
move(d): 如果d为正数,则光标向尾部移动d个位置,如果为负数,则向头部移动
erase(): 删除光标当前指向的元素,完成后光标向尾部移动一个位置,如果没有元素可指向,则光标值为END。
L的初始状态为空,且光标指向END

注意事项:

insert返回值是插入元素的位置,而其又会在插入元素后自动后移,无法达到题目要求的“插入后光标指向新插入的元素x”,所以指针要保持原来的位置。

#include<cstdio>
#include<list>
#include<iostream> 
using namespace std;
list<int> s;
list<int>::iterator p;
int main()
{
	int q,pd,x;
	scanf("%d",&q);
	p=s.begin();
	for(int i=1;i<=q;i++)
	{
		scanf("%d",&pd);
		if(pd==0)
		{
			scanf("%d",&x);
			p=s.insert(p,x);
		}
		else
		if(pd==1)
		{
			scanf("%d",&x);
			if(x>0)
			{
				while(x--)
				{
					p++;
				}
			}
			else
			{
				x=-x;
				while(x--)
				{
					p--;
				}
			}
		}
		else
		{
			p=s.erase(p);
		}
	}
	for(p=s.begin();p!=s.end();p++)
	{
		printf("%d
",*p); 
	}
	return 0;
} 
原文地址:https://www.cnblogs.com/ShineEternal/p/10939919.html