#include <iostream>
using namespace std;
typedef struct node
{
int val;
node* next;
}node;
class ListNode
{
private:
node* l1;
node* l2;
node* head; //新的头结点
node* rear; //新的尾结点
public:
bool InitList()
{
l1=new node;
l2=new node;
l1->next=nullptr;
l2->next=nullptr;
l1->val=0; //用来记录链表中有效结点的个数
l2->val=0; //用来记录链表中有效结点的个数
return true;
}
//首先new一个空的结点
bool CreateList1(int val)
{
node* temp=l1;//将temp赋值l1的地址
temp->val++;
while(temp->next!=nullptr&&val>temp->next->val)
{
temp=temp->next; //创建一个有序的链表
}
if(temp->next!=nullptr) //说明是val<=temp->next->val
{
node* after = temp->next;
temp->next=new node;
temp->next->val=val;
temp->next->next=after;
}
else
{
temp->next=new node;
temp->next->val=val;
temp->next->next=nullptr;
}
return true;
}
bool CreateList2(int val)
{
node* temp=l2;//将temp赋值l1的地址
temp->val++;
while(temp->next!=nullptr&&val>temp->next->val)
{
temp=temp->next; //创建一个有序的链表
}
if(temp->next!=nullptr) //说明是val<=temp->next->val
{
node* after = temp->next;
temp->next=new node;
temp->next->val=val;
temp->next->next=after;
}
else
{
temp->next=new node;
temp->next->val=val;
temp->next->next=nullptr;
}
return true;
}
bool printList2()
{
while(l2->next!=nullptr)
{
cout<<l2->next->val<<endl;
l2=l2->next;
}
return true;
}
bool Merge() //合并两个有序的链表
{
node* x=l1->next;
node* y=l2->next;
while(x!=nullptr&&y!=nullptr)
{
if(x->val>y->val)
{
head=y;
rear=y->next;
while(rear!=nullptr&&rear->val<x->val)
{
head=head->next;
rear=rear->next;
}
head->next=x;
node* Next=x->next;
x->next=rear;
x=Next;
}
else
{
node* Next=x->next;
x->next=y;
node* ss = l2;
while(ss->next!=y)
{
ss=ss->next;
}
ss->next=x;
x=Next;
}
}
return true;
}
};
int main()
{
ListNode space;
space.InitList();
space.CreateList1(4);
space.CreateList1(56);
space.CreateList1(1);
space.CreateList2(9);
space.CreateList2(23);
space.CreateList2(0);
space.Merge();
space.printList2(); //打印l2链表的数据
system("pause");
}