C++头插法尾插法建立单链表,合并两个有序单链表

博客围绕单链表归并算法展开,已知A和B是两个带表头结点且元素递增有序的单链表,要设计算法将A和B归并成按元素值非递减有序的链表C,且C由A和B中的结点组成。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

A和B是两个单链表(带表头结点),其中元素递增有序。设计一个算法,将A和B归
并成一个按元素值非递减有序的链表 C,C由A 和B 中的结点组成。

#include<iostream>
#include<stdlib.h>

using namespace std;

typedef struct LNode
{
    int data;
    struct LNode * next;
}LNode;

/**
尾插法建立单链表
*/
void createlistR(LNode *&C,int a[],int n)
{
    LNode *s,*r;
    C=new LNode;
    C->next=NULL;
    r=C;
    for(int i=0;i<n;i++)
    {
        s=new LNode;
        s->data=a[i];
        r->next=s;
        r=r->next;
    }
    r->next=NULL;
}

/****************
头插法建立单链表
*****************/
createlistF(LNode *&C,int a[],int n)
{


    LNode* s;
    C=new LNode;
    C->next=NULL;
    for(int i=0;i<n;i++)
    {
        s=new LNode;
        s->data=a[i];
        s->next=C->next;
        C->next=s;
    }
}

void merge1(LNode* A,LNode* B,LNode *&C)
{
    LNode* p=A->next;
    LNode* q=B->next;
    LNode* r;//始终指向C的终端节点
    C=A;
    C->next=NULL;
    r=C;
    free(B);
    while(p!=NULL&&q!=NULL)
    {
        if(p->data<q->data)
        {
            r->next=p;p=p->next;
            r=r->next;
        }
        else
        {
            r->next=q;q=q->next;
            r=r->next;
        }
    }
//    r->next=NULL;
    if(p!=NULL)r->next=p;
    if(q!=NULL)r->next=p;
}

int main()
{
    int a[]={1,4,7,8,10,15,77,90};
    int b[]={1,2,3,4,5,6,9};
    LNode* head1=new LNode;
    createlistR(head1,a,8);
    LNode* head2=new LNode;
    createlistR(head2,b,7);
    LNode* p=head1->next;
    while(p)
    {
        cout<<p->data<<" ";
        p=p->next;
    }
    cout<<endl;
      p=head2->next;
    while(p)
    {
        cout<<p->data<<" ";
        p=p->next;
    }
    cout<<endl<<"*************合并后***********"<<endl;
    LNode* result;
    merge1(head1,head2,result);
    p=result->next;
    while(p)
    {
        cout<<p->data<<" ";
        p=p->next;
    }
    return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值