#include
#include
struct datalist
{
int data;
struct datalist *next;
};
struct datalist *list;
struct datalist *creathead()
{
struct datalist *head;
head=(struct datalist *)malloc(sizeof(struct datalist));
head->next=NULL;
return head;
}
struct datalist *addlist(struct datalist *head)
{
struct datalist p=(struct datalist)malloc(sizeof(struct datalist));
int n,i;
printf("请输入列表的数值长度:");
scanf("%d",&n);
p=head;
for(i=0;i
struct datalist *q=(struct datalist*)malloc(sizeof(struct datalist));
printf("请输入第%d个数据的数值:",i+1);
scanf("%d",&q->data);
q->next=NULL;
p->next=q;
p=q;
}
return head;
}
struct datalist *output(struct datalist *head)
{
struct datalist *node;
node=(struct datalist *)malloc(sizeof(struct datalist));
node=head->next;
while(node){
printf("%d",node->data);
node=node->next;
}
}
struct datalist *add(struct datalist *la,struct datalist *lb,struct datalist *lc)
{
struct datalist pa,pb,pc;
pa=(struct datalist)malloc(sizeof(struct datalist));
pb=(struct datalist)malloc(sizeof(struct datalist));
pc=(struct datalist)malloc(sizeof(struct datalist));
pa=la->next;
pb=lb->next;
pc=lc=la;
while(pa&&pb){
if(pa->data<=pb->data){
pc->next=pa;
pc=pa;
pa=pa->next;
}
else{
pc->next=pb;
pc=pb;
pb=pb->next;
}
}
pc->next=pa?pa:pb;
return lc;
}
void main()
{
struct datalist *la,lb,lc;
printf("请输入第一个链表的数据域\n");
la=creathead();
addlist(la);
printf("请输入第二个链表的数据域\n");
lb=creathead();
addlist(lb);
lc=creathead();
add(la,lb,lc);
printf("合并的有序单链表为:\n");
output(lc);
}
```
```**
struct datalist *output(struct datalist *head)
{
struct datalist *node;
node=(struct datalist *)malloc(sizeof(struct datalist));
node=head->next;
在这里 print 一下 head 所指向的结构的内容。
修改如下,供参考:
#include<stdio.h>
#include<stdlib.h>
struct datalist{
int data;
struct datalist *next;
};
//struct datalist *list; 修改
struct datalist *creathead()
{
struct datalist *head;
head=(struct datalist *)malloc(sizeof(struct datalist));
head->next=NULL;
return head;
}
struct datalist *addlist(struct datalist *head)
{
//struct datalist* p=(struct datalist*)malloc(sizeof(struct datalist));修改
struct datalist* p;
int n,i;
printf("请输入列表的数值长度:");
scanf("%d",&n);
p=head;
for(i=0;i<n;i++){
struct datalist *q=(struct datalist*)malloc(sizeof(struct datalist));
printf("请输入第%d个数据的数值:",i+1);
scanf("%d",&q->data);
q->next=NULL;
p->next=q;
p=q;
}
return head;
}
struct datalist *output(struct datalist *head)
{
struct datalist *node;
//node=(struct datalist *)malloc(sizeof(struct datalist)); 修改
node=head->next;
while(node){
printf("%d ",node->data);
node=node->next;
}
}
struct datalist *add(struct datalist *la,struct datalist *lb,struct datalist *lc)
{
struct datalist *pa,*pb,*pc;
//pa=(struct datalist)malloc(sizeof(struct datalist));修改
//pb=(struct datalist)malloc(sizeof(struct datalist));
//pc=(struct datalist)malloc(sizeof(struct datalist));
pa=la->next;
pb=lb->next;
pc=lc; //=la;修改
while(pa&&pb){
if(pa->data <= pb->data){
pc->next=pa;
pc=pa;
pa=pa->next;
}
else{
pc->next=pb;
pc=pb;
pb=pb->next;
}
}
pc->next=pa?pa:pb;
return lc;
}
int main() //void 修改
{
struct datalist *la,*lb,*lc;
printf("请输入第一个链表的数据域\n");
la=creathead();
addlist(la);
printf("请输入第二个链表的数据域\n");
lb=creathead();
addlist(lb);
lc=creathead();
add(la,lb,lc);
printf("合并的有序单链表为:\n");
output(lc);
return 0;
}