合并两个有序递增单链表为一个递增单链表

本文探讨数据结构课后习题中关于合并有序递增单链表的问题,强调了在处理链表时忽视深拷贝与浅拷贝区别的潜在风险。深拷贝确保拷贝的对象与原对象相互独立,而浅拷贝则可能导致对象间的操作互相影响,甚至引起错误。
摘要由CSDN通过智能技术生成

数据结构课后习题

我发现网上大部分代码都是没有考虑浅拷贝的问题,这在开发中是非常致命的问题。

深拷贝与浅拷贝区别

1、深拷贝

深拷贝指拷贝对象与原来的对象独立存在,即使改动、删除一个都不会影响另一个。

2、浅拷贝 

浅拷贝只复制指针地址,两个对象共用一块内存,更改其中一个值会导致另一个跟着改变,删除可能会造成错误。

void Merge(SingleList* L1, SingleList* L2) //L2接收合并后链表
{

	if (L2->first == NULL)    //L1不为空L2为空时,深拷贝L1到L2
	{
		Node* p=L1->first;
		L2->n = L1->n;
		Node* q = (Node*)malloc(sizeof(Node));
		L2->first = q;
		q->element = p->element;
		q->link = NULL;
		while (p->link!=NULL)
		{
			p = p->link;
			Node* temp = (Node*)malloc(sizeof(Node));
			temp->element = p->element;
			temp->link = NULL;
			q->link = temp;
			q = q->link;
		}
		return;
	}
    //其他情况采用将L1中元素插入到L2中,同样是深拷贝
	Node* p = L1->first, * q = L2->first, * r = q;
	L2->n += L1->n;
	
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值