CF847A Union of Doubly Linked Lists 题解

· · 题解

题目传送门

题意

给你一些双向链表,让你把这些双向链表连起来。

思路

模拟即可,只需把上一条链表的尾巴和下一条链表的头连在一起,再把尾巴的值存下来就好了。链表实现其实可以用数组模拟。

代码

#include<bits/stdc++.h>
#define ll long long
using namespace std;
const int maxn=105; 
int a[maxn],b[maxn];
int n,cnt;
int main(){
    scanf("%d",&n);
    for(int i=1;i<=n;i++) scanf("%d%d",&a[i],&b[i]);
    for(int i=1;i<=n;i++){
        if(!a[i]){
            b[cnt]=i,a[i]=cnt,cnt=i;
            while(b[cnt]) cnt=b[cnt];
        }
    }   
    for(int i=1;i<=n;i++) printf("%d %d\n",a[i],b[i]);
    return 0;
}