include <stdio.h>
include <stdlib.h>
typedef struct LNode
{
int data;
LNode *next;
} LNode,*LinkList;
void MergeList(LinkList &La,LinkList &Lb,LinkList &Lc)
{
LNode *pa;LNode *pb;LNode *pc;
pa=La->next;pb=Lb->next;
Lc=La;
pc=Lc;
while (pa&&pb)
{
if(pa->data<pb->data)
{
pc->next=pa;
pc=pa;
pa=pa->next;
}
else if(pa->data>pb->data)
{
pc->next=pb;
pc=pb;
pb=pb->next;
}
else
{
pc->next=pa;
pc=pa;
pa=pa->next;
pb=pb->next;
}
}
pc->next=pa?pa:pb;
delete Lb;
pc->next=pa?pa:pb; //插入剩余段
delete Lb; //释放Lb的头结点
}
int main(void)
{
struct LNode* head1=(struct LNode*)malloc(sizeof(struct LNode*));
head1->next=NULL;
struct LNode* p;
p=head1;
int n;
printf("输入第一个连表的长度\n");
scanf("%d",&n);
printf("输入相应长度的值\n");
for(int i=0;i<n;i++)
{
struct LNode* s=(struct LNode*)malloc(sizeof(struct LNode*));
scanf("%d",&s->data);
p->next=s;
s->next=NULL;
p=s;
}
struct LNode* head2=(struct LNode*)malloc(sizeof(struct LNode*));
head2->next=NULL;
struct LNode* w;
w=head2;
int m;
printf("输入第二个连表的长度\n");
scanf("%d",&m);
printf("输入相应长度的值\n");
for(int j=0;j<m;j++)
{
struct LNode* q=(struct LNode*)malloc(sizeof(struct LNode*));
scanf("%d",&q->data);
w->next=q;
q->next=NULL;
w=q;
}
struct LNode* head3=(struct LNode*)malloc(sizeof(struct LNode*));
head3->next=NULL;
MergeList(head1,head2,head3);
p=head3;
printf("输出结果");
while (p->next != NULL)//如果p的下一个结点不为NULL,也就是说如果p结点后还有节点存在,那就输出p后面结点中保存的数据。
{
printf("%d\n", p->next->data);
p = p->next;//p结点后移
}
return 0;
}
最后一次更新于2022-01-21
好兄弟
By 白山 at November 1st, 2021 at 04:12 pm.