实验03-顺序表-
题目描述
假定两个单链表是递增有序,定义并实现以下函数,完成两个单链表的合并,继续保持递增有序
int LL_merge(ListNode *La, ListNode *Lb)
输入
第1行先输入n表示有n个数据,接着输入n个数据
第2行先输入m表示有M个数据,接着输入m个数据
输出
输出合并后的单链表数据,数据之间用空格隔开
输入样例
3 11 33 55
4 22 44 66 88
11 22 33 44 55 66 88
(格式:最后一个数据仍然带空格
#include<iostream>
using namespace std;
typedef struct node
{
int data;
struct node *next;
}node;
void create(node *H,int n)
{
H->next=NULL;
struct node *p=H,*s;
int e,i;
for(i=0;i<n;i++)
{
cin>>e;
s=new node;s->next=NULL;s->data=e;
p->next=s;
p=s;
}
}
void merge(node *l1,node *l2)
//没有重新创建一个空结点,而是变换指针
{
node *l3=new node;
struct node *p1,*p2,*p3;
p1=l1->next; p2=l2->next;
l3=p3=l1;
while(p1&&p2)
{
if(p1->data<=p2->data)
{
p3->next=p1;
p3=p1;
p1=p1->next;
}
else
{
p3->next=p2;
p3=p2;
p2=p2->next;
}
}
p3->next=p1?p1:p2;//插入剩余段
//(p3->next直接指向!=NULL这一边)
while(l3->next)
{
l3=l3->next;
cout<<l3->data<<" ";
}
cout<<endl;
}
int main()
{
int n,m;
node *L1=new node;
node *L2=new node;
cin>>n;
create(L1, n);
cin>>m;
create(L2, m);
merge(L1,L2);
delete L1;delete L2;
return 0;
}
(只能说我成长了,当时在机房写了一个小时没写出来,现在居然十分钟就写完了无语