这段代码是一个C++程序,主要实现了以下功能:
- 通过尾插法建立两个单链表L1和L2;
- 将两个单链表合并成一个新的单链表L3;
- 打印输出新的单链表L3;
- 销毁三个单链表。
在运行程序之前,需要保证你已经定义了SLinkNode结构体,并且实现了CreateListR、Merge、DispList和DestroyList函数。具体实现如下:
#include <iostream>
using namespace std;
const int MAXSIZE = 100; // 定义最大长度
// 单链表节点结构体
struct SLinkNode {
int data;
SLinkNode* next;
};
// 尾插法建立单链表
void CreateListR(SLinkNode*& L, int a[], int n) {
L = new SLinkNode;
L->next = NULL;
SLinkNode* r = L; // 尾指针
for (int i = 0; i < n; ++i) {
SLinkNode* p = new SLinkNode;
p->data = a[i];
p->next = NULL;
r->next = p;
r = p;
}
}
// 合并两个有序单链表为一个新的有序单链表
void Merge(SLinkNode* L1, SLinkNode* L2, SLinkNode*& L3) {
SLinkNode* p1 = L1->next; // 指向L1首节点
SLinkNode* p2 = L2->next; // 指向L2首节点
L3 = new SLinkNode;
L3->next = NULL;
SLinkNode* r = L3; // 尾指针
while (p1 && p2) {
if (p1->data <= p2->data) {
r->next = p1;
p1 = p1->next;
} else {
r->next = p2;
p2 = p2->next;
}
r = r->next;
}
if (p1)
r->next = p1;
if (p2)
r->next = p2;
}
// 打印输出单链表元素
void DispList(SLinkNode* L) {
SLinkNode* p = L->next; // 指向首节点
while (p) {
cout << p->data << " ";
p = p->next;
}
cout << endl;
}
// 销毁单链表
void DestroyList(SLinkNode*& L) {
SLinkNode* p = L;
while(L != NULL)
{
p=L;p=L -> next;delete(p);
}
L=NULL ;
}
int main() {
SLinkNode *L1, *L2, *L3;
int n, m, a[MAXSIZE], b[MAXSIZE];
cin >> n;
for(int i=0;i<n;i++)
cin>>a[i];
CreateListR(L1,a,n);
cin >> m;
for(int i=0;i<m;i++)
cin>>b[i];
CreateListR(L2,b,m);
Merge(L1,L2,L3);
DispList(L3);
DestroyList(L1);
DestroyList(L2);
DestroyList(L3);
return 0;
}
以上就是这段C++程序的完整实现。你可以根据自己的需求修改输入和输出部分,以及其他功能函数的实现。记得在使用完动态分配的内存后,要记得及时释放,避免内存泄漏。
内容由零声教学AI助手提供,问题来源于学员提问