編寫一個(gè)函數(shù)完成如下功能:將兩個(gè)遞增的有序鏈表合并為一個(gè)遞增的有序鏈表。要求結(jié)果鏈表仍使用原來(lái)的鏈表空間,不另外占用其他的存儲(chǔ)空間。表中不允許有重復(fù)的數(shù)據(jù)。
要求,在主函數(shù)中調(diào)用上面的函數(shù)測(cè)試。
提示:還需要定義其他函數(shù),比如初始化鏈表,構(gòu)造單鏈表,輸出單鏈表。
#include<iostream>
using namespace std;
//定義單鏈表
typedef struct LNode
{
int data;
struct LNode *next;
}LNode,*LinkList;
//初始化單鏈表
int InitList(LinkList &L)
{
L = new LNode;
L->next = NULL;
return 0;
}
//構(gòu)造單鏈表
int ConsList(LinkList &L)
{
cout << "輸入賦值的個(gè)數(shù):" ;
int n;
cin >> n;
LinkList r = L;
cout << "輸入鏈表:";
for (int i = 0; i < n; i++) {
LinkList p = new LNode;
cin >> p->data;
p->next = NULL;
r->next = p;
r = p;
}
return 0;
}
//合并
void MergeList_L(LinkList &LA,LinkList &LB,LinkList &LC){
LinkList pa = LA->next;
LinkList pb = LB->next;
LC = LA;
LinkList pc = LC;
while (pa && pb)
{
if (pa->data < pb->data)
{
pc->next = pa;
pc = pa;
pa = pa->next;
}
else if(pb->data<pa->data)
{
pc->next = pb;
pc = pb;
pb = pb->next;
}
else
{
pc->next = pa;
pc = pa;
pa = pa->next;
LinkList p = pb;
pb = pb->next;
delete p;
}
}
if (pa)
{
pc->next = pa;
}
else
{
pc->next = pb;
}
delete LB;
}
//輸出鏈表
void print(LinkList L){
LinkList p = L->next;
while(p)
{
cout << p->data<<" ";
p = p->next;
}
}
int main()
{
cout << "請(qǐng)輸入第一個(gè)遞增的鏈表:"<<endl;
LinkList LA, LB, LC;
InitList(LA);
ConsList(LA);
cout << "請(qǐng)輸入第二個(gè)遞增的鏈表:"<<endl;
InitList(LB);
ConsList(LB);
MergeList_L(LA,LB,LC);
cout << "合并為一個(gè)遞增的鏈表后為:";
print(LC);
return 0;
}
輸出結(jié)果:?文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-741405.html
文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-741405.html
到了這里,關(guān)于將兩個(gè)遞增的有序鏈表合并為一個(gè)遞增的有序鏈表.【數(shù)據(jù)結(jié)構(gòu)】【線性表】的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!