C++链表合并程序:两链表合并为一新链表(按从小到大顺序,不生成新的节点)(无需修改,直接复制粘贴运行)
·
#include <iostream>
#include<stdlib.h>
// 定义链表节点结构体
typedef struct L{
struct L* next;
int data;
} node, *LinkList;
// 链表合并函数
LinkList Merge(LinkList &A, LinkList &B) {
// 定义工作指针 a 指向链表 A,b 指向链表 B,c 用于构建合并后的链表,C 记录合并链表的头节点
LinkList a = A, b = B, c, C;
// 比较 A 和 B 的首节点数据,确定 c 和 C 的初始指向
if (a->data < b->data) {
c = a;
C = c;
a = a->next;
} else {
c = b;
C = c;
b = b->next;
}
// 当 A 和 B 都不为空时进行循环
while (a && b) {
if (a->data < b->data) {
c->next = a;
a = a->next;
c = c->next;
} else {
c->next = b;
b = b->next;
c = c->next;
}
}
// 如果 A 还有剩余节点,连接到 c 后面
if (a) {
c->next = a;
} else {
// 如果 B 还有剩余节点,连接到 c 后面
c->next = b;
}
// 返回合并后的链表头节点
return C;
}
int main() {
LinkList A, B;
// 为链表 A 分配内存并初始化数据
A = (node*)malloc(sizeof(node));
A->data = 1;
A->next = (node*)malloc(sizeof(node));
A->next->data = 2;
A->next->next = NULL;
// 为链表 B 分配内存并初始化数据
B = (node*)malloc(sizeof(node));
B->data = 0;
B->next = (node*)malloc(sizeof(node));
B->next->data = 4;
B->next->next = NULL;
LinkList C;
// 调用合并函数,将 A 和 B 合并为 C
C = Merge(A, B);
// 遍历并输出合并后的链表 C 的数据
while (C) {
std::cout << C->data;
C = C->next;
}
return 0;
}

更多推荐
所有评论(0)