/* 你的代码将被嵌在这里 */
List Merge(List L1, List L2)
{
List p = L1->Next; //从第二个节点开始合并
List q = L2->Next; //注意到头结点是空的,即L1,L2对应的存储单元中无Data
List L3 = (List)malloc(sizeof(List));//为什么不是Node而是PtrToNode或struct Node?完成后试下其他几个
L3->Next = NULL;
List s = L3;//令s=L3是为了让L3表示链表头
/*思路:依次遍历比较出两个单链表中的较小数据项,并接入到新链表中*/
while (p && q)//为什么不能用p->Data && q->Data? 答:p和q都代表某一Node的Next,值
{ //为空或指向下一节点,若这样做一来不符合想法,二来在最后一个节点时会越界
if (p->Data <= q->Data)
{
s->Next = p;
p = p->Next;
}
else
{
s->Next = q;
q = q->Next;
}
s = s->Next;
}
if(p)
{
s->Next = p;
}
else
{
s->Next = q;
}
//s->Next = NULL;不能加这句,因为p或q末尾已经有NULL了
L1->Next = NULL;
L2->Next = NULL;
return(L3);
}
浙江大学-陈越-数据结构-02-线性结构1 两个有序链表序列的合并 可通过C语言代码
最新推荐文章于 2023-05-08 21:10:25 发布