写一程序,实现两个有序链表的并操做,要求合并后的链表也是有序的。
參考答案:先输入2个有序链表 字母,数字均可. 请连续输入 按回车结束该链表的输入
希望对楼主有帮助 能理解算法
补充下:由于匆忙 数字只支持10以内 希望楼主有更好的算法共同交流
#include<stdio.h>
typedef struct node/*单链表*/
{
char data;
struct node *next;
}node;
void W_get(node *h,char c)/*尾插函数*/
{
node *p;
p=(node*)malloc(sizeof(node));
p->data=c;
p->next=NULL;
while(h->next!=NULL)
h=h->next;
p->next=h->next;
h->next=p;
}
void change(node *a,node *b,node *c)/*求并集函数*/
{
node *q,*p;
q=c;
a=a->next;b=b->next;c=c->next;
while(a!=NULL&&b!=NULL)
{
p=(node*)malloc(sizeof(node));
if(a->data<b->data)
{
p->data=a->data;
q->next=p;
q=p;
a=a->next;
}
else if(a->data>b->data)
{
p->data=b->data;
q->next=p;
q=p;
b=b->next;
}
else
{
p->data=a->data;
q->next=p;
q=p;
a=a->next;
b=b->next;
}
}
if(a->next==NULL)
{
q->next->data=a->data;
q->next=b;
}
else
{
q->next->data=b->data;
q->next=a;
}
}
main()
{
node *first,*second,*l,*l1;
char c;
first=(node*)malloc(sizeof(node));
first->next=NULL;
second=(node*)malloc(sizeof(node));
second->next=NULL;
l=(node*)malloc(sizeof(node));
l->next=NULL;
printf("first :");
while((c=getchar())!='\n')
W_get(first,c);
printf("second :");
while((c=getchar())!='\n')
W_get(second,c);
change(first,second,l);
l1=l->next;
printf("\nNEW:");
while(l1!=NULL)
{
printf("->%c",l1->data);
l1=l1->next;
}
getch();
}