/*
2019/9/25
By ASJA
*/#include<stdio.h>#include<iostream>typedefstruct LinkNode {int data;
LinkNode* next;voidInitForTest(LinkNode*& initLink,int TestData[],int length);intcmp(int a,int b);voidPrintLink(const LinkNode* Pt);voidMainMethodForBToS(LinkNode*& DataLInk, LinkNode*& Ha_or_b, LinkNode*& Pc);voidCombine_Big_To_S(LinkNode*& A, LinkNode*& B, LinkNode*& C);}*Link;void LinkNode::InitForTest(LinkNode*& initLink,int TestData[],int length){
initLink =(Link)malloc(sizeof(Link));
initLink->data = length;//index_0 as len
Link p = initLink;for(int i =0; i < length; i++){
Link s;//for inset
s =(Link)malloc(sizeof(Link));if(s ==NULL){printf("malloc error");exit(-1);}
s->data = TestData[i];//data input
p->next = s;
p = s;}
p->next =NULL;}int LinkNode::cmp(int a,int b){if(a >= b)return1;elsereturn-1;}void LinkNode::PrintLink(const LinkNode* Pt){while(Pt->next){
std::cout << Pt->next->data <<" ";
Pt = Pt->next;}
std::cout << std::endl;}void LinkNode::MainMethodForBToS(LinkNode*& DataLInk, LinkNode*& Ha_or_b, LinkNode*& Pc){
Ha_or_b = DataLInk;
DataLInk = DataLInk->next;
Ha_or_b->next =NULL;
Ha_or_b->next = Pc;
Pc = Ha_or_b;}void LinkNode::Combine_Big_To_S(LinkNode*& A, LinkNode*& B, LinkNode*& C){
Link Pa, Pb, Pc;//pa pb pc playas current position
Link Ha, Hb;//Ha Hb is for temp
Pc =(Link)malloc(sizeof(Link));
Pc->data =0; Pc->next =NULL;// as for init len is 0int a, b;//a b as dataelement
Pa = A->next;
Pb = B->next;//first nodewhile(Pa && Pb){
a = Pa->data;
b = Pb->data;switch(cmp(a, b)){case1: LinkNode::MainMethodForBToS(Pb, Hb, Pc);break;case-1: LinkNode::MainMethodForBToS(Pa, Ha, Pc);break;default:break;}}if(!Pa){while(Pb) LinkNode::MainMethodForBToS(Pb, Hb, Pc);}else{while(Pa) LinkNode::MainMethodForBToS(Pa, Ha, Pc);}
C = Pc;}intmain(){//for test
Link A, B, C;//init A and B for testint TestDataA[]={2,5,7,10,46};//for testint TestDataB[]={4,5,13,34,78,82,100};//for test
A->InitForTest(A, TestDataA,5);
B->InitForTest(B, TestDataB,7);//print A and B
std::cout <<"Link A : ";//for show
A->PrintLink(A);
std::cout <<"Link B : ";
B->PrintLink(B);//main method Combine
A->Combine_Big_To_S(A, B, C);//print the Result C
std::cout <<"After Combined : ";//for showwhile(C->next){
std::cout << C->data <<" ";
C = C->next;}system("pause");}