C++里以节点数据比较连接法进行不含头结点链表合并

#include <stdio.h>
#include <stdlib.h>
#include <time.h>

// 定义元素类型
typedef int element;

// 定义链表节点结构体
typedef struct LNode {
    element data;  // 节点存储的数据
    struct LNode* next;  // 指向下一个节点的指针
} Lnode, *LinkList;

// 打印链表的函数
void PrintfL(LinkList L) {
    static int z = 0;  // 静态变量,用于记录打印次数
    z++;
    // 输出打印链表的信息
    printf("========================打印链表%d=========================\n", z);
    int i = 1;
    // 遍历链表并输出每个节点的信息
    while (L) {
        printf("第%d个节点:%d\n", i, L->data);
        i++;
        L = L->next;
    }
}

// 合并两个链表的函数
LinkList Merge(LinkList A, LinkList B) {
    LinkList p = A, q = A;
    // 如果 A 和 B 都不为空
    if (A && B) {
        // 比较 A 和 B 的第一个节点数据,确定 p 的初始指向
        if (A->data < B->data) {
            p = A;
            A = A->next;
        } else {
            p = B;
            B = B->next;
        }
        q = p;
    }
    // 当 A 和 B 都未遍历完时
    while (A && B) {
        // 根据数据大小确定将哪个节点连接到 p 后面
        if (A->data < B->data) {
            p->next = A;
            A = A->next;
        } else {
            p->next = B;
            B = B->next;
        }
        p = p->next;
    }
    // 将剩余的链表连接到 p 后面
    p->next = (A)? A : B;
    // 打印合并后的链表
    PrintfL(q);
    return q;
}

int main() {
    LinkList L, A, B, p, q;
    // 为链表 A 分配内存并初始化
    p = (LinkList)malloc(sizeof(Lnode));
    A = p;
    p->data = 1;
    p->next = (LinkList)malloc(sizeof(Lnode));
    p->next->data = 9;
    p->next->next = NULL;
    // 为链表 B 分配内存并初始化
    q = (LinkList)malloc(sizeof(Lnode));
    B = q;
    q->data = 2;
    q->next = (LinkList)malloc(sizeof(Lnode));
    q->next->data = 10;
    q->next->next = NULL;

    // 合并链表 A 和 B
    Merge(A, B);

    return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值