含有random指针的链表复制

(1)含有随机指针的链表拷贝

代码暂未测试

typedef struct NODE
{
int value;
NODE* next;
NODE* random;
}NODE;


NODE* ListCopy(NODE *head)
{
NODE *pHead = head;
NODE *sHead = NULL;
NODE *returnHead = NULL;
while(pHead != NULL)
{
sHead = (NODE *)malloc(sizeof(NODE));
sHead->value = pHead->value;
sHead->next = pHead->next;
sHead->random = NULL;
pHead->next = sHead;


pHead = pHead->next;
}
if(head != NULL)
returnHead = head->next;
else
returnHead = NULL;
pHead = head;
sHead = pHead->next;
while(pHead != NULL)
{
pHead->next = pHead->next->next;
sHead->next = sHead->next->next;
sHead->random = pHead->random->next;


pHead = pHead->next->next;
sHead = sHead->next->next;
}


return (returnHead);


}


注:malloc用法
1)对于内存的使用情况,在操作系统中维护了一个空闲链表,当用户调用malloc()函数申请内存空间时,操作系统从此链表中找出一块能够满足用户请求大小的空间,
将此空间一分为二,将其中一块的首地址返回给用户,另一块返还给空闲链表,同时在此空间的头部放置数据信息结构(包括数据大小,空间已分配标记等),如果
找不到足够大的内存块,操作系统将会对内存碎片进行整理,整理之后能够满足则返回分配的内存首地址,否则返回NULL;当用户调用free()函数时,系统将
地址库返还给空闲链表。

2)在此例子中,虽然是在子函数中调用的malloc()函数申请动态内存,但是子函数退出时并没有释放此块内存,所以调用函数扔能够访问到子函数申请的内存。


3)访问子函数申请的动态内存方法(a)利用二级指针,修改调用函数中指针所指向的位置为子函数动态申请的内存地址;(b)利用return返回子函数申请的动态
内存地址到调用函数。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值