【求助】各位大神帮帮忙,关于链表的有序合并...
已知有两个链表a和b,结点类型相同,均包括一个int类型的数据。编程把两个链表合并成一个,结点按升序排列。【主要是让输入insert,merge,sort里面的内容,是评判系统上面的题目,其余是题目自带的,无法修改。】
【不知道哪里错了啊,用codeblock完全没问题,上评判系统没办法通过?我觉得是逻辑问题...用codepad看了下说是Segmentation fault...】
程序代码:
#include "stdio.h" #include "malloc.h" #define LEN sizeof(struct DATA) struct DATA { long num; struct DATA *next; }; struct DATA *create(int n) { struct DATA *head=NULL,*p1=NULL,*p2=NULL; int i; for(i=1;i<=n;i++) { p1=(struct DATA *)malloc(LEN); scanf("%ld",&p1->num); p1->next=NULL; if(i==1) head=p1; else p2->next=p1; p2=p1; } return(head); } struct DATA *merge(struct DATA *head, struct DATA *head2) { struct DATA *p1; p1=head; while(p1->next!=NULL)p1=p1->next; p1->next=head2; return head; } struct DATA *insert(struct DATA *head, struct DATA *d) { struct DATA *p0,*p1,*p2; p1=head; p0=d; if(head==NULL)head=p0; else { while(((p0->num)>(p1->num))&&(p1->next!=NULL)) { p2=p1; p1=p1->next; } if((p0->num)<(p1->num)) { if(head==p1)head=p0; else p2->next=p0; p0->next=p1; } else p1->next=p0; } return head; } struct DATA *sort(struct DATA *head) { struct DATA *p1,*p2; p2=head;p1=head; p2=p2->next; p1->next=NULL; p1=p2; while(p2->next!=NULL) { p2=p2->next; p1->next=NULL; head=insert(head,p1); p1=p2; } head=insert(head,p1); return head; } void print(struct DATA *head) { struct DATA *p; p=head; while(p!=NULL) { printf("%ld",p->num); p=p->next; printf("\n"); } } main() { struct DATA *head, *head2; int n; long del_num; scanf("%d",&n); head=create(n); scanf("%d",&n); head2=create(n); head = merge(head, head2); head = sort(head); print(head); }
[此贴子已经被作者于2015-12-21 00:43编辑过]