合成两个有序链表不知道错在哪里,求高手帮忙!
程序代码:
#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; } }