这道题很容易想到要构建一个循环链表来确定每个球的相对位置,就是操作比较繁琐,考虑情况较多。
首先要创建节点Node,每个节点都有一个初始顺序order,指向左边的Node*指针left,和指向右边的Node*指针right。
struct Node
{
int order;
Node *left,*right;
}node[N];
然后给每个小球附上顺序,并建立和左右的联系。
void build(int n)
{
int i,order=1;
for(i=1;i<n;i++)
{
node[i].order=i;
node[i].right=&node[i+1];
node[i+1].left=&node[i];
}
node[1].left=&node[n];
node[n].right=&node[1];
node[n].order=n;
}
然后就是A、B操作,下边叙述一下A操作(将x放在y左边)的实现方法:
1.将x左边节点的right指针指向x的右边节点
2.将x右边节点的left指针指向x的左边节点
3.将x的right指向y节点
4.将x的left指向y左边的节点
5.将y左边节点的right指向x节点
6.将y的left指向x节点
实现代码:
void A(int x,int y)
{
Node *p=&node[x],