浙大数据结构:02-线性结构1 两个有序链表序列的合并
数据结构MOOC
PTA习题
02-线性结构1 两个有序链表序列的合并
用p1,p2存储两个头节点。如果都为空直接返回一个空链表
否则选两条链表中第一个较小的值作为新链表第一个结点。
L1,L2后移一下,然后删除两个没有用的头节点
循环遍历,把值小的插入链表中,直到一个链表遍历完。
再把没遍历完的链表插入新链表中,最后返回头节点
List Merge(List L1,List L2)
{
List p1=L1,p2=L2;
List head=(List)malloc(sizeof(struct Node));
if(p1->Next==NULL&&p2->Next==NULL)
{
head->Next=NULL;return head;
}
head->Next=L1->Next->Data>L2->Next->Data?L2->Next:L1->Next;
List p=head;
L1=L1->Next;L2=L2->Next;
p1->Next=NULL;p2->Next=NULL;
while(L1!=NULL&&L2!=NULL)
{
if(L1->Data<L2->Data)
{
head->Next=L1;
head=head->Next;
L1=L1->Next;
}
else
{
head->Next=L2;
head=head->Next;
L2=L2->Next;
}
}
if(L1)
head->Next=L1;
else if(L2)
head->Next=L2;
return p;
}