2-7 G. DS单链表--合并

题目描述

假定两个单链表是递增有序,定义并实现以下函数,完成两个单链表的合并,继续保持递增有序

int LL_merge(ListNode *La, ListNode *Lb)

输入 

第1行先输入n表示有n个数据,接着输入n个数据

第2行先输入m表示有M个数据,接着输入m个数据

输出 

输出合并后的单链表数据,数据之间用空格隔开

样例 

输入样例

3 11 33 55
4 22 44 66 88

输出样例

11 22 33 44 55 66 88 

代码 

#include <iostream>
using namespace std;

struct Node{  //结点
    int data;
    Node *next;
};

class List{
public:
    Node *head;
    List(){
        head = new Node;
        head->next = NULL;
    }

    void create(){
        int n;
        cin >> n;
        Node *tail = head;
        for(int i = 0; i < n; i++){
            Node *s = new Node;
            cin >> s->data;
            tail->next = s;
            s->next = NULL;
            tail = s;
        }
    }

    int LL_merge(List *La, List *Lb){  //Lc调用此函数得到合并后的单链表
        head = La->head;  //以La的头结点作为Lc的头结点
        Node *c = head;
        Node *p = La->head->next;  //p指向La
        Node *q = Lb->head->next;  //q指向Lb
        while(p && q){  //当La、Lb指向的结点都存在时,即两表都还未遍历完时
            if(p->data <= q->data){
                c->next = p;
                c = p;
                p = p->next;
            }else{
                c->next = q;
                c = q;
                q = q->next;
            }
        }
        //若其中一表已经合并完,将剩余一表全部增添到Lc中
        while(p){
            c->next = p;
            c = p;
            p = p->next;
        }
        while(q){
            c->next = q;
            c = q;
            q = q->next;
        }
        display();
    }

    void display(){
        Node *p = head->next;
        while(p){
            cout << p->data << " ";
            p = p->next;
        }
        cout << endl;
    }
};

int main()
{
    List La,Lb,Lc;
    La.create();
    Lb.create();
    Lc.LL_merge(&La, &Lb);
    return 0;
}
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值