pta题解
习题2.4 递增的整数序列链表的插入 (15分)
这道题先申请一个空间然后把数据存进去,然后从头开始遍历,如果比当前遍历到的小,那么就插在它的前面。通过q,和l两个指针,l一直往下遍历,然后更新q,这样会比较容易插入,要注意考虑,可能会一直遍历到最尾部才满足条件
List Insert( List L, ElementType X )
{
List head=L;
L=L->Next;
List p=(List)malloc(sizeof(struct Node));
p->Data=X;
p->Next=NULL;
List q=head;
while(L->Data<X)//循环遍历
{
q=L;//更新q
L=L->Next;//l指针往后移动
if(L->Next==NULL)
{
L->Next=p;
return head;
}
}
p->Next=L;
q->Next=p;
return head;
}
习题2.5 两个有序链表序列的合并 (15分)
这道题本来我没有思路,以为要新建一个链表,后来看了别人的题解才有了思路,这道题就是建立一个头结点,然后比较两个链表,小的就插进去,然后向后移,然后继续比较,直到有一条链的指针为空了就停止,这时候还需要判断两条链是不是都插进去了,有可能有一条因为数据都比另一条大,所以就还会剩一些数字没插进去。
List Merge( List L1, List L2 )
{
List L,p,w,q;
w=L1->Next;
q=L2->Next;
L=(List)malloc(sizeof(List));
p=L;
while(w&&q)
{
if(w->Data<q->Data)
{
p->Next=w;
p=p->Next;
w=w->Next;
}
else
{
p->Next=q;
p=p->Next;
q=q->Next;
}
}
if(w)
{
p->Next=w;
}
if(q)
{
p->Next=q;
}
L1->Next=NULL;
L2->Next=NULL;
return L;
}