有两个按元素值递增有序的单链表A和B,编一程序将A表和B表归并成一个新的递增有序的单链表C(值相同的元素只保留一个在C表中)
#include <stdio.h>
typedef struct node
{ int data;
struct node *next;
} LINKLIST;
LINKLIST *creat ( *void) ;
merger (LINKLIST *head_a,LINKLIST *head_b,LINKLIST *head_c) ;
void print (LINKLIST *head_c) ;
main()
{ LINKLIST a={1,3,8,19,26};
LINKLIST b={2,3,10,11,19,23,29,35};
LINKLIST *head_a=&a,*head_b=&b;
LINKLIST *head_c;
head_c=creat ();
merger ( head_a, head_b,head_c) ;
print ( head_c);
}
LINKLIST *creat ( *void)
{ LINKLIST *r,*head_c,*last;
r=malloc (sizeof(LINKlIST)); // 建立表头节点
head_c=r;last=r;
t->next=NULL;
return (head_c);
}
merger(LINKLIST *head_a,LINKLIST *head_b,LINKLIST *head_c) // 合并链表
{ LINKLIT *p,*q,*r,*last;
p=head_a,q=head_b,r=head_c ,last=r;
while (p!=NULL&&q!=NULL)
{ r=malloc(sizeof(LINKLIST));
if (p->data<q->data)
{
r->data=p->data;
last->next=r;
last=r;
r->next=NULL;
p=p->next;
r=r->next; //这里好象很有问题,因为后面没有节点了,可是不知道该怎么弄
}
else if (p->data>q->data)
{
r->data=q->data)
last->next=r;
last=r;
t->next=NULL;
q=q->next;
r=r->next;
}
else {
r->data=p->data;
last->next=r;
last=r;
t->next=NULL;
p=p->next;
q=q->next;
r=r->next;
}
}
while (p!=NULL)
{ r=malloc (sizeof(LINKLIST));
r->data=p->data;
last->next=r;
last=r;
t->next=NULL;
p=p->next;
r=r->next;
}
while (q!=NULL)
{ r=malloc (sizeof(LINKLIST));
r->data=q->data;
last->next=r;
last=r;
t->next=NULL;
q=q->next;
r=r->next;
}
}
void print (LINKLIST *head_c) // 链表C的输出
{ LINKLIST *r;
printf("The new LINKLIST:\n");
r=head_c;
r=r->next;
while (r!=NULL)
{ printf("%6d",r->data);
r=r->next;
}
}
好象写的很不对,谁能帮我写个,让我对照一下
PS:可以再附加一个问题吗?
点分十进制表示的IP地址131.107.2.89的二进制表示是________
[此贴子已经被作者于2006-10-14 11:08:59编辑过]