ZBLOG

int main() { SLinkNode *L1,*L2,*L3; int n,m,a[MAXSIZE],b[MAXSIZE]; cin>>n; for(int i=0;i>a[i]; CreateListR(L1,a,n); //尾插法建表 cin>>m; for(int i=0;i>b[i]; CreateListR(L2,b,m); //尾插法建表 Merge(L1,L2,L3); ...

这段代码是一个C++程序,主要实现了以下功能:

  1. 通过尾插法建立两个单链表L1和L2;
  2. 将两个单链表合并成一个新的单链表L3;
  3. 打印输出新的单链表L3;
  4. 销毁三个单链表。

在运行程序之前,需要保证你已经定义了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助手提供,问题来源于学员提问

本站部分文章来源于网络,版权归原作者所有,如有侵权请联系站长删除。
转载请注明出处:https://golang.0voice.com/?id=8484

分享:
扫描分享到社交APP
上一篇
下一篇
发表列表
游客 游客
此处应有掌声~
评论列表

还没有评论,快来说点什么吧~

联系我们

在线咨询: 点击这里给我发消息

微信号:3007537140

上班时间: 10:30-22:30

关注我们
x

注册

已经有帐号?