看到链表于是顺便尝试了一下。。好吧,本题不难,但是有一些很好的方法确实可以从中体会到。
首先,链表的使用上,并不是非得用结构实现的,可以用多个数组来代替实现链表的功能。不然,你的代码看起来会是这样:
if(op==1){
ball[p[ad1]].left->right=ball[p[ad1]].right;
ball[p[ad1]].right->left=ball[p[ad1]].left;
ball[p[ad1]].left=ball[p[ad2]].left;
ball[p[ad1]].right=&ball[p[ad2]];
ball[p[ad2]].left->right=&ball[p[ad1]];
ball[p[ad2]].left=&ball[p[ad1]];
}else if(op==2){
ball[p[ad1]].left->right=ball[p[ad1]].right;
ball[p[ad1]].right->left=ball[p[ad1]].left;
ball[p[ad1]].right=ball[p[ad2]].right;
ball[p[ad1]].left=&ball[p[ad2]];
ball[p[ad2]].right->left=&ball[p[ad1]];
ball[p[ad2]].right=&ball[p[ad1]];
}
好吧,对结构指针的运用不是很熟悉,所以看起来很繁琐,但是一旦用了结构实现的话看起来一定不会很简洁。
其次,链表并不是只包含一个指针的,在这道题上面,双向链表的使用可以大大降低本题的复杂度。
最后,再用链表做合并操作的时候,使用一个函数确实非常简洁。