题目:输入两个递增排序的链表 合并这两个链表并使心里暗标中的结点仍然是按照递增的排序
链表结点的定义如下:
struct ListNode
{
int m_nValue;
ListNode *m_pNext;
};
<pre name="code" class="cpp">#include <iostream>
using namespace std;
struct ListNode
{
int m_nValue;
ListNode *m_pNext;
};
ListNode *creatlist(int n)
{
ListNode *p=(ListNode *)malloc(sizeof(ListNode));
ListNode *s=p;
int temp=0;
if(n==0)
{
p=NULL;
return p;
}
cout<<"输入第"<<0<<"个结点:";
cin>>temp;
p->m_nValue=temp;
p->m_pNext=NULL;
for(int i=1;i<n;i++)
{
ListNode *t=(ListNode *)malloc(sizeof(ListNode));
cout<<"输入第"<<i<<"个结点:";
cin>>temp;
t->m_nValue=temp;
t->m_pNext=NULL;
p->m_pNext=t;
p=t;
}
p->m_pNext=NULL;
return s;
}
ListNode *merge(ListNode *L1,ListNode *L2)
{
ListNode *s=L1;
ListNode *t=L2;
ListNode *m=L1;
ListNode *n=L2;
while(s!=NULL && t!=NULL)
{
if(s->m_nValue>t->m_nValue)
{
m->m_pNext=t;
n=t->m_pNext;
t->m_pNext=s;
m=t;
t=n;
}
else
{
m=s;
s=s->m_pNext;
}
}
if(s==NULL)
m->m_pNext=s;
return L1;
}
ListNode *merger(ListNode *L1,ListNode *L2)
{//递归~~~~
if(L1==NULL)
return L2;
else
if(L2==NULL)
return L1;
ListNode *p;
if(L1->m_nValue < L2->m_nValue)
{
p=L1;
p->m_pNext=merger(L1->m_pNext,L2);
}
else
{
p=L2;
p->m_pNext=merger(L1,L2->m_pNext);
}
return p;
}
int main()
{
cout<<"输入链表1 结点个数:";
int n1;
cin>>n1;
ListNode *p1=creatlist(n1);
cout<<"输入链表2 结点个数:";
int n2;
cin>>n2;
ListNode *p2=creatlist(n2);
cout<<"================"<<endl;
ListNode *s;
if(p2==NULL && p2==NULL)
return -1;
if(p1==NULL)
s=p2;
if(p2==NULL)
s=p1;
if(p1->m_nValue < p2->m_nValue)
s=merge(p1,p2);
else
s=merge(p2,p1);
while(s!=NULL)
{
cout<<s->m_nValue<<' ';
s=s->m_pNext;
}
return 0;
}