将两个递增的有序链表合并为一个递增的有序链表。

将两个递增的有序链表合并为一个递增的有序链表。要求结果链表仍使用原来两个链表

#include "stdio.h"
#include<stdlib.h>
typedef struct node{
int data;
struct node* next;
}listnode;
typedef listnode* linklist;/* ´øÍ·µ¥Á´±íµÄÍ·Îļþ */
linklist init_linklist()
{/* ³õʼ»¯´øÍ·µ¥Á´±í */
linklist head;
head=(linklist)malloc(sizeof(listnode));
head->next=NULL;
return head;
}
linklist create_linklist_tail()/* Êý×Ö 0 Ϊ½áÊø·û */
{/* β²å·¨½¨Á¢´øÍ·Á´±í */
linklist head,r,s;int x;
head=init_linklist();
r=head;
scanf("%d",&x);
while(x)
{
s=(linklist)malloc(sizeof(listnode));
s->data=x;
r->next=s;
r=s;
scanf("%d",&x);
}
r->next=NULL;
return head;
}
void output_linklist(linklist head)
{/* Êä³ö´øÍ·µ¥Á´±íÖеĸ÷½áµãÖµ */
linklist p;
p=head->next;
if(!p)
printf("NO data!");
else
while(p)
{
printf("%3d",p->data);
p=p->next;
}
}
void merge(linklist head, linklist head2)
{
linklist p1, q1;
linklist p2, q2;
p1 = head->next;
q1 = p1->next;
p2 = head2->next;
q2 = p2->next;
while(p2){
while(q1 && !(p2->data >= p1->data && p2->data <= q1->data))
{
p1 = q1;
q1 = q1->next;
}
if(!(p2->data == p1->data || p2->data == q1->data))
{
p2->next = p1->next;
p1->next = p2;
p1 = p2;
q1 = p1->next;
}
p2 = q2;
q2 = q2->next;
}
}
void main(void)
{
linklist head,head2;
head=create_linklist_tail();
head2=create_linklist_tail();
merge(head, head2);
output_linklist(head);
getchar();
}
/* ÊÇ´øÍ·Á´½ÓµÄ×ö·¨£¬ÎÒÒѾ­ÔËÐйýÊÇ¿ÉÒÔÓõģ¬¾ßÌå×Ô¼º·ÖÎö merge º¯Êý£¬ÓÐÎÊÌâÇëÖ¸³ö */
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值