假定两个单链表是递增有序,定义并实现以下函数,完成两个单链表的合并,继续保持递增有序
int LL_merge(ListNode *La, ListNode *Lb)
假定两个单链表是递增有序,定义并实现以下函数,完成两个单链表的合并,继续保持递增有序
int LL_merge(ListNode *La, ListNode *Lb)
输出合并后的单链表数据,数据之间用空格隔开
#include<iostream> using namespace std; #define ok 0 #define error -1 class CNode { int data; CNode *next; public: CNode() { next=NULL; } CNode(int n,CNode *p) { data=n; next=p; } int getdata() { return data; } CNode *getnext() { return next; } void setnext(CNode *p) { next=p; } }; class CList { friend class CNode; CNode *head; int nodenumber; public: CList() { head=NULL; nodenumber=0; } ~CList() { for(int i=0;i<nodenumber;i++) { CNode *p=head; head=head->getnext(); delete p; } } void nodeplus() { nodenumber++; } void nodeminus() { nodenumber--; } void createTailList(int *num,int n) { CNode *tail; CNode *s; head=new CNode(); tail=head; for(int i=0;i<n;i++) { s=new CNode(num[i],NULL); tail->setnext(s); tail=s; nodeplus(); } } CNode *findreal(int i) { if(i<=0||i>nodenumber) { cout<<"error"<<endl; return NULL; } else return indexfind(i); } CNode *indexfind(int i) { if(i<0) { return NULL; } CNode *p=head; int k=1; while(k<=i&&p!=NULL) { p=p->getnext(); k++; } return p; } int Insert(int i,int num) { if(i<=0||i>nodenumber+1) { cout<<"error"<<endl; return error; } nodeplus(); CNode *p=indexfind(i-1); CNode *temp=new CNode(num,p->getnext()); p->setnext(temp); return ok; } int Delete(int i) { if(i<1||i>nodenumber) { cout<<"error"<<endl; return error; } nodeminus(); CNode *p=indexfind(i-1); CNode *temp=p->getnext(); p->setnext(temp->getnext()); delete temp; return ok; } void display() { CNode *p=head->getnext(); while(p!=NULL) { cout<<p->getdata()<<" "; p=p->getnext(); } cout<<endl; } void create() { head=new CNode(); nodenumber=0; } friend CList beOne(CList &L1,CList &L2) { CList temp; temp.create(); while(L1.head->getnext()!=NULL||L2.head->getnext()!=NULL) { if(L1.head->getnext()==NULL) { CNode *p=L2.head->getnext(); temp.Insert(temp.nodenumber+1,p->getdata()); L2.Delete(1); } else if(L2.head->getnext()==NULL) { CNode *p=L1.head->getnext(); temp.Insert(temp.nodenumber+1,p->getdata()); L1.Delete(1); } else { CNode *p1=L1.head->getnext(); CNode *p2=L2.head->getnext(); if(p1->getdata()<=p2->getdata()) { temp.Insert(temp.nodenumber+1,p1->getdata()); L1.Delete(1); } else if(p1->getdata()>p2->getdata()) { temp.Insert(temp.nodenumber+1,p2->getdata()); L2.Delete(1); } } } return temp; } }; int main() { int n; cin>>n; int *num1=new int[n]; for(int i=0;i<n;i++) { cin>>num1[i]; } CList L1; L1.createTailList(num1,n); cin>>n; int *num2=new int[n]; for(int i=0;i<n;i++) { cin>>num2[i]; } CList L2; L2.createTailList(num2,n); beOne(L1,L2).display(); delete []num1; delete []num2; return 0; }
原文:https://www.cnblogs.com/SZU-DS-wys/p/12177900.html