#include<stdio.h>
#include<stdlib.h>
typedef struct node
{
int data;
struct node *next;
}LinkNode;
LinkNode* Creat_LinkList2()
{
int x;
LinkNode* h;
LinkNode *s,*t;
printf("请输入链表的数据域的值");
scanf("%d",&x);
h=(LinkNode *)malloc (sizeof(LinkNode));
h->next=NULL;
t=h;
while(x!=-1)
{
s=(LinkNode *)malloc(sizeof(LinkNode));
s->data=x;
s->next=t->next;
t->next=s;
t=s;
scanf("%d",&x);
}
return h;
}
void PrintLink(LinkNode *h)
{
LinkNode *p;
for(p=h->next;p;p=p->next)
{
printf("%d ",p->data);
}
}
LinkNode *MergeLink(LinkNode *head1,LinkNode *head2)
{
LinkNode*p,*t,*q,*k;
p=head1->next;
q=head2->next;
head1->next = NULL;
k = head1;
while(q&&p)
{
if(p->data<=q->data)
{
t=p->next;
p->next = k->next;
k->next = p;
k = k->next;
p = t;
}
else
{
t = q->next;
q->next = k->next;
k->next = q;
k = k->next;
q = t;
}
}
if(p)
q = p;
while(q)
{
t = q->next;
q->next = k->next;
k->next = q;
k = k->next;
q = t;
}
return head1;
}
int main(void)
{
LinkNode *head1,*head2,*head3;
//尾插创建链表
printf("请输入第一个升序链表,-1表示输入结束\n");
head1 = Creat_LinkList2();
printf("请输入第二个升序链表,-1表示输入结束\n");
head2 = Creat_LinkList2();
head3 = MergeLink(head1,head2);
PrintLink(head3);
return 0;
}
合并两升序单链表为升序单链表
最新推荐文章于 2023-04-29 10:30:57 发布