6.14 链表合并

Link: 4273. 链表合并 - AcWing题库

转置短链表采用 进栈的方法实现 。

输出两个长链表 在输出一个短链表

循环控制如下

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-k6tqh7eW-1655211975395)(assets/image-20220614152018-chphnaj.png)]

代码没按思路走

#include<iostream>
#include<algorithm>
#include<cstring>
#include<string>
#include<stack>
using namespace std;

typedef struct node{
    int a,next;
}node;

const int maxn=1e5+10;

node a[maxn];

node l1[maxn];
node l2[maxn];
int l1n,l2n;
stack< pair<int,int> > st;

void fun(int x,int y){
    for(int i=x;i!=-1;i=a[i].next){
        st.push({i,a[i].a});
    }
    int i=y;

    for(;i!=-1;){
        if(a[i].next!=-1)
            printf("%05d %d %05d\n",i,a[i].a,a[i].next);
        else
            printf("%05d %d -1\n",i,a[i].a);
        i=a[i].next;if(i==-1) return ;

        if(st.size()){
            auto it=st.top();st.pop();
            printf("%05d %d %05d\n",i,a[i].a,it.first);
            i=a[i].next;
  
            if(i!=-1)
                printf("%05d %d %05d\n",it.first,it.second,i);
            else
                printf("%05d %d -1\n",it.first,it.second);
        }else{
            if(a[i].next!=-1)
                printf("%05d %d %05d\n",i,a[i].a,a[i].next);
            else
                printf("%05d %d -1\n",i,a[i].a);
            i=a[i].next;
        }


    }


int main(){
    l1n=l2n=0;
    int h1,h2,n;
    cin>>h1>>h2>>n;
    int ad;
    for(int i=0;i<n;i++){
        cin>>ad;
        cin>>a[ad].a>>a[ad].next;
    }
    for(int i=h1;i!=-1;i=a[i].next){
        l1n++;
    }
    for(int i=h2;i!=-1;i=a[i].next){
        l2n++;
    }
    if(l1n<l2n){
        fun(h1,h2);
    }else{
        fun(h2,h1);
    }

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值