第三组两个有序表合并
#include<stdio.h>
#include<stdlib.h>
typedef struct List
{
int data;
struct List *next;
} List;
List *createlist();
void printflist(List *pre);
List *sort(List *head);
List *add(List *L1,List *L2);
int main()
{
List *L1,*L2,*L3,*L;
L1=createlist();
L2=createlist();
L3=add(L1,L2);
L=sort(L3);
printflist(L) ;
}
List *createlist()
{
List *L,*p,*q;
L=(List*)malloc(sizeof(List*));
L->next=NULL;
p=L;
int m;
scanf("%d",&m);
if(m!=-1)
{
L->data=m;
p=L;
}
else
return 0;
scanf("%d",&m);
while(m!=-1)
{
q=(List*)malloc(sizeof(List*));
q->data=m;
p->next=q;
p=q;
scanf("%d",&m);
}
p->next=NULL;
return L;
}
List *add(List *L1,List *L2)
{
List *p,*q,*pre,*r;
p=L1->next;
pre=L1;
q=L2;
r=pre;
while(p!=NULL)
{
pre->next=p;
pre=pre->next;
p=p->next;
}
while(q!=NULL)
{
pre->next=q;
pre=pre->next;
q=q->next;
}
pre->next=NULL;
return r;
}
void printflist(List *L)
{
while(L)
{
if(L->next!=NULL)
{
printf("%d ",L->data);
}
else
printf("%d",L->data);
L=L->next;
}
}
List *sort(List *head)
{
List *p,*pre,*q;
p=head->next->next;
head->next->next=NULL;
while(p!=NULL)
{
q=p->next;
pre=head;
while(pre->next!=NULL&&pre->next->data<p->data)
pre=pre->next;
p->next=pre->next;
pre->next=p;
p=q;
}
return head;
}
这又合并两条单链表并排序的题目呢,在PTA上未能实现满分。
主要有一下几点错误;
1.当输入第一条链表的第一个数字为-1时,程序就无法运行。
2.组员对指针的移动掌握不熟悉,常常使指针指向错误。
3.部分组员的printList函数出错,主要是对题目没有认真审题,对题目要求的末尾无空格没有特殊处理。
4.对于结构体,结构体函数和typedef的运用不熟悉。
5.对链表指针与指向指针的指针概念混淆。
未解决错误的第一点。
希望老师能对链表指针与指向指针的指针给我们做个辨析。