#include <iostream>
using namespace std;
#define MAX_SIZE 10
typedef int ElemType;
//***********單鏈表的存盤結構*************
struct LNode
{
ElemType data;
struct LNode *next;
}*LinkLista,*LinkListb,*LinkListc;
void MergeList(struct LNode *,struct LNode *,struct LNode *); //所需函式宣告
void InitList_L(struct LNode *);
void CreateList_F(struct LNode * , int);
//*********************單鏈表初始化函式********************
void InitList_L(struct LNode * L)
{
L = new struct LNode;
L->data = 0;
L->next = NULL;
}
//*********************前叉法構造單鏈表O(n)****************
void CreateList_F(struct LNode *L , int n)
{
int i = 0;
InitList_L(L);
struct LNode *p;
p = new struct LNode;
cout<<"請按照題目要求,輸入整型遞增資料"<<endl;
for (i = n ; i > 0 ; i -- )
{
cin>>p->data;
p->next = L->next; //應該是這個位置
L->next = p;
}
}
void main()
{
CreateList_F(LinkLista,MAX_SIZE);
CreateList_F(LinkListb,MAX_SIZE);
CreateList_F(LinkListc,0);
MergeList(LinkLista,LinkListb,LinkListc);
}
//***************遞增資料鏈表無重復合并******************
void MergeList(struct LNode *La,struct LNode *Lb,struct LNode *Lc)
{
//合并鏈表La和Lb,合并后的新表使用頭指標Lc指向
struct LNode *pa,*pb,*pc,*q;
pa = La->next;
pb = Lb->next; //pa和pb分別是鏈表LA和LB的作業指標,初始化為相應鏈表的第一個結點
Lc = pc = La; //用LA的頭結點作為LC的頭結點
while(pa && pb)
{
if (pa->data < pb->data)
{
pc->next = pa;
pa = pa->next;
} //取較小者LA中的元素,將PA連接在PC的后面,PA的指標后移
else if (pa->data > pb->data)
{
pc->next = pb;
pb = pb->next;
} //取較小者LB中的元素,將PB鏈接在PC的后面,PB指標后移
else
{
pc->next = pa;
pc = pa;
pa = pa->next;
q = pb->next;
delete pb;
pb = q;
} //相等時取LA中的元素,洗掉LB中的元素
}
pc->next = pa?pa:pb; //插入剩余段
delete Lb; //釋放LB的頭結點
}
uj5u.com熱心網友回復:
建議您使用遞迴如何?轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/151584.html
標籤:基礎類
