#include <stdio.h>
#include<malloc.h>
typedef struct LNode{
int data;
struct LNode *next;
};
struct LNode* creat(int a[],int n)
{
LNode* head=(LNode*)malloc(sizeof(LNode));
LNode* p=head;
for(int i=0;i<n;i++)
{
LNode* q=(LNode*)malloc(sizeof(LNode));
q->data=a[i];
p->next=q;
p=p->next;
}
p->next=NULL;
return head;
}
//合并 (破坏原来链表的方法 )
struct LNode* hebing(LNode* head1,LNode* head2)
{
LNode* head=(LNode*)malloc(sizeof(LNode));
LNode* a=head1->next;
LNode* b=head2->next;
LNode* p=head;
while(a&&b)
{
if(a->data>b->data)
{
p->next=b;
b=b->next;
}else
{
p->next=a;
a=a->next;
}
p=p->next;
p->next=NULL;
}
if(a!=NULL)
{
p->next=a;
}
if(b!=NULL)
{
p->next=b;
}
return head;
}
//合并 (不破坏原来链表的方法 )
struct LNode* hebing1(LNode* head1,LNode* head2)
{
LNode* head=(LNode*)malloc(sizeof(LNode));
LNode* a=head1->next;
LNode* b=head2->next;
LNode* p=head;
while(a&&b)
{
if(a->data>b->data)
{
LNode* q=(LNode*)malloc(sizeof(LNode));
q->data=b->data;
p->next=q;
b=b->next;
}else
{
LNode* q=(LNode*)malloc(sizeof(LNode));
q->data=a->data;
p->next=q;
a=a->next;
}
p=p->next;
}
while(a!=NULL)
{
LNode* q=(LNode*)malloc(sizeof(LNode));
q->data=a->data;
p->next=q;
a=a->next;
p=p->next;
}
while(b!=NULL)
{
LNode* q=(LNode*)malloc(sizeof(LNode));
q->data=b->data;
p->next=q;
b=b->next;
p=p->next;
}
p->next=NULL;
return head;
}
//
void visit(LNode* head)
{
if(head==NULL)
return ;
LNode *p=head->next;
while(p!=NULL)
{
printf("%d ",p->data);
p=p->next;
}
printf("\n");
}
int main()
{
int a[10],b[10];
for(int i=0;i<20;i++)
{
if(i%2==0)
{
a[i/2]=i;
}else
{
b[i/2]=i;
}
}
LNode* head1=(LNode*)malloc(sizeof(LNode));
LNode* head2=(LNode*)malloc(sizeof(LNode));
head1=creat(a,10);
head2=creat(b,10);
visit(head1);
visit(head2);
visit(hebing1(head1,head2));
visit(head1);
visit(head2);
visit(hebing(head1,head2));
visit(head1);
visit(head2);
return 0;
}
数据结构 合并有序链表
最新推荐文章于 2022-12-18 19:59:30 发布