对合并链表的理解

本文详细解析了将两个已排序的链表合并为一个新链表的算法过程,并通过具体代码示例阐述了如何实现这一过程。重点介绍了指针操作及内存分配等内容。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

题目:将两个从小到大排序好的链表L1、L2合并到L3中
List Merge( List L1, List L2 )
{
List p1, p2, p3, L;
L = (List)malloc(sizeof(struct Node));
p1 = L1->Next;
p2 = L2->Next;
p3 = L;
while (p1 && p2){
if (p1->Data <= p2->Data){
p3->Next = p1;
//p3 = p1;
p1 = p1->Next;
} else {
p3->Next = p2;
//p3 = p2;
p2 = p2->Next;
}
p3=p3->Next;
}
p3->Next = p1 ? p1 : p2;
L1->Next = NULL;
L2->Next = NULL;
return L;
}
**分析:**在上面的代码中我刚开始很不理解为什么要将P1赋给P3, p3->Next = p1这句话的意思相当于一个指针,是将P1的下一个地址赋给p3的下一个地址,p3 = p1相当于p3=p3->Next只是将P3继续指向下一个地址,所以可以将if else中的 p3 = p1; 和p3 = p2直接在循环外写成p3=p3->Next(注意:结点L是动态分配内存)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值