浙江大学-陈越-数据结构-02-线性结构1 两个有序链表序列的合并 可通过C语言代码

/* 你的代码将被嵌在这里 */
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);
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值