将两个单链表合并成一个单链表,L1,L2 —>L3

版权声明:谢谢 https://blog.csdn.net/Waybyway/article/details/83418932

将两个单链表合并成一个单链表

假设L1=(x1,x2,x3……Xn)长度为n

L2=(y1,y2,y3………Ym)长度为m

若m<n,则L3=(x1,y1,x2,y2,x3,y3………………Xn,Yn,Yn+1,Yn+2……Ym);

若m>n,则L3=(x1,y1,x2,y2,x3,y3………………Xm,Ym,Xm+1,Xm+2……Xn);

#include <iostream>
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <malloc.h>
using namespace std;
typedef struct Node{//单链表类型
    int data;
    struct Node *next;
}List;

void Create_List(List *&L,int x){//用来建立普通单链表L1,L2
    List *s,*r;
    L=(List *)malloc(sizeof(List));
    L->next=NULL;
    r=L;//尾插法建立
    for(int i=0;i<x;i++)
    {
        s=(List *)malloc(sizeof(List));
        scanf("%d",&s->data);
        r->next=s;
        r=s;
    }
    r->next=NULL;
}
//下面的Connect——List函数是用来链接L1,L2,与本题无关
/*void Connect_List(List *&L,List *&L2,int m,int n){
    List *l=L;
    List *q=L2;
    for(int i=0;i<n;i++)
    {
        l=l->next;
    }
    l->next=q->next;
}*/
void Print(List *&L,int n){//打印链表的函数
    List *p=L->next;//跳过头结点到 首结点
    while (p!=NULL)//结点不为空,继续
    {
        printf("%d ",p->data);
        p=p->next;
    }
}/*
    利用L1,L2产生新的链表L3
    L1长度为N,L2长度为M
    先判断L1,l2那条链段,去长度为mini
    假设M为的较大,N为较小的,temp=0,尚未交换
    所以随后第二个for循环,为L3链赋L2的值
    若是N较大,则交换他们两个
    介值temp这时就不为0,了
    所以随后第二个for循环,为L3链赋L1的值
*/
void CreatList3(List *&L1,List *&L2,List *&L3,int m,int n){
    List *l=L1->next;
    List *q=L2->next;
    //List *h=L3;
    int mini,temp=0;
    if(m<n){
        temp=m;
        m=n;
        n=temp;
    }
    mini=temp;
    List *s,*r;
    L3=(List *)malloc(sizeof(List));
    L3->next=NULL;
    r=L3;
    for(int i=0;i<mini;i++)
    {
        s=(List *)malloc(sizeof(List));
        s->data=l->data;
        l=l->next;
        r->next=s;
        r=s;
        s=(List *)malloc(sizeof(List));
        s->data=q->data;
        q=q->next;
        r->next=s;
        r=s;
    }
    for(int j=0;j<(m-mini);j++){
        if(temp!=0){
            s=(List *)malloc(sizeof(List));
            s->data=l->data;
            l=l->next;
            r->next=s;
            r=s;
        }else{
            s=(List *)malloc(sizeof(List));
            s->data=q->data;
            q=q->next;
            r->next=s;
            r=s;
        }

    }
    r->next=NULL;
}

int main(){
    List *L1,*L2,*L3;
    int n,m;
    L1=(List *)malloc(sizeof(List));
    L2=(List *)malloc(sizeof(List));
    L3=(List *)malloc(sizeof(List));
    cin>>n;
    Create_List(L1,n);
    cin>>m;
    Create_List(L2,m);
    CreatList3(L1,L2,L3,m,n);
    Print(L3,n);
    free(L3);
    //Connect_List(L1,L2,m,n);
    //Print(L1,n);
    //free(L1);
    return 0;
}

参考 https://blog.csdn.net/lizizhenglzz/article/details/82822252

C++:将两个单链表合并成一个单链表

初学者l06

猜你喜欢

转载自blog.csdn.net/Waybyway/article/details/83418932