合成两个有序链表不知道错在哪里,求高手帮忙!
程序代码:#include <stdio.h>
#include <stdlib.h>
typedef struct node
{
int data;
struct node* next;
}lnode,*linklist;
linklist list_create(int n);
void list_print(linklist L);
linklist list_together(linklist L1,linklist L2);
int main()
{
linklist L1=list_create(3);
linklist L2=list_create(3);//创建两个新的链表
list_print(list_together(L1,L2));//输出合成后的链表
return 0;
}
linklist list_create(int n)//建立新的链表
{
int i;
linklist L,q,p;
L=(linklist)malloc(sizeof(lnode));
if(!L)return 0;
L->next=NULL;
p=L;
for(i=1;i<=n;i++)
{
q=(linklist)malloc(sizeof(lnode));
if(!q)return 0;
printf("Please input the NO.%d number:",i);
scanf("%d",&q->data);
p->next=q;
q->next=NULL;
p=q;
}
return L;
}
linklist list_together(linklist L1,linklist L2)//合成1,2两个有序链表
{
linklist p1,p2,p3,L3;
p1=L1->next;
p2=L2->next;
L3=p3=(linklist)malloc(sizeof(lnode));
if(!p3)exit(1);
L3->next=p3->next=NULL;
while(p1&&p2)//将L1,L2两个链表里的值从第一个开始比较
{
if(p1->data<=p2->data)
{
p3->next=p1;
p3=p3->next;
p1=p1->next;
}
if(p2->data<=p1->data)
{
p3->next=p1;
p3=p3->next;
p1=p1->next;
}
}//谁的值更小就将它赋给L3
//两个链表总会有一个先空,下面判断是哪个链表先空的
if(p1==NULL)
{
p3->next=p2;
free(L1);L1=NULL;
}
if(p2==NULL)
{
p3->next=p1;
free(L2);L2=NULL;
}//将L3连接到没空的那个链表头上,再释放掉另一个链表
return L3;
}
void list_print(linklist L)//将合成后的链表输出
{
linklist p=L->next;
while(p)
{
printf("%d ",p->data);
p=p->next;
}
}








