移动小球链表实现

有一些小球,从左至右编号为1 2 3 ...... n

执行A 1 4后,小球1被移到4的左边

执行B 3 5后,小球3被移到5的右边

样例输入:

6 2
A 1 4
B 3 5

样例输出:

 214536

 1 #include<stdio.h>
 2 const int N=50000;
 3 struct Node
 4 {
 5     int order;
 6     Node *left,*right;
 7 }node[N];
 8 
 9 void CreateNode(int n)
10 {
11     int i;
12     for(i = 1;i <= n;i++)
13     {
14         node[i].order = i;
15         node[i].right = &node[i+1];
16         node[i+1].left= &node[i];        
17     }
18     node[0].left = NULL;
19     node[0].right = &node[1];
20     node[1].left = &node[0];
21     node[i].right = NULL;
22 }
23 void A(int x,int y)
24 {
25     Node *p = &node[x],*q = &node[y]; 
26     p->right->left=p->left;  
27     p->left->right=p->right;  
28     p->right=q;  
29     p->left=q->left;  
30     q->left->right=p;  
31     q->left=p;    
32 }
33 
34 void B(int x,int y)
35 {
36     Node *p = &node[x],*q = &node[y]; 
37     p->right->left = p->left;  
38     p->left->right = p->right;  
39     p->left = q;  
40     p->right = q->right;  
41     q->right->left = p;  
42     q->right = p;  
43 }
44 int main()
45 {
46     int n,m;
47     char cmd;
48     int x,y;
49     scanf("%d%d",&n,&m);
50     CreateNode(n);
51     while(m--)
52     {
53         scanf("%*c%c%d%d",&cmd,&x,&y);
54         if(cmd == 'A')
55             A(x,y);
56         if(cmd == 'B')
57             B(x,y);
58     }
59     Node *l = &node[0];
60     l = l->right;
61     while(l->right)
62     {
63         printf("%d",l->order);
64         l = l->right;
65     }
66     return 0;
67 }

在此感谢这篇博客给我的帮助http://blog.csdn.net/taotaotaotao910429/article/details/7831479

转载于:https://www.cnblogs.com/boyiliushui/p/5026604.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值