02-线性结构1 两个有序链表序列的合并 (15 分)

本文详细解析了链表合并算法的实现过程,通过创建新链表的方式,将两个已排序的单链表合并成一个新的有序链表。文章深入介绍了算法的具体步骤,包括初始化新链表、比较并连接节点,以及处理剩余节点等关键环节。
List Merge( List L1, List L2 )   ///合并函数 
{   
    //思路是,创建一个新链表L,且三个链表的头指针(老大)L1,L2,L都不要变(都指向头结点),派他们的小弟p1,p2,pL去拉帮结派,或者开除帮众,构建一个新帮派
List p1,p2,pL,L;
L = (List)malloc(sizeof(struct Node));//开帮派必须得开空间啊,就是头结点啦,里面是没有数据的!链表List的名字L就是指向头结点的指针!,所以下面pL=L就可以啦
//malloc返回void* 类型指针,它可以通过类型转换强制转换为任何其它类型的指针
//如果在C++中,可以直接用new来分配内存,可以自动识别内存大小,并分配同类型的指针

p1=L1->Next;     //因为L1和L2是给定的带头结点的单链表,所以不能p1 = L1,因为如果p1=L1,下面的p1->Data编译器就会懵逼;
p2=L2->Next;
pL=L;
while(p1&&p2)
{
    if(p1->Data <= p2->Data)
    {
        pL->Next = p1;
        pL = p1;
        p1 = p1->Next;
    }
    else
    {
        pL->Next = p2;
        pL = p2;
        p2 = p2->Next;
    }
}

if(p1)
    pL->Next = p1;
else
    pL->Next = p2;
//或者
//pL->Next = p1 ? p1 :p2;
L1->Next= NULL;
L2->Next= NULL;   //空链表,解散帮众
return L;

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值