读书人

严蔚敏数据结构P31算法2.12MergeList-

发布时间: 2012-08-16 12:02:16 作者: rapoo

严蔚敏数据结构P31算法2.12MergeList-L中 free(Lb)怎么理解?
Status MergeList(LinkList *La, LinkList *Lb, LinkList *Lc)
{
LinkListPtr pa = NULL, pb = NULL, pc = NULL;
pa = La->next;
pb = Lb->next;
Lc = pc = La;
while(pa && pb)
{
if(pa->data <= pb->data)
{
pc->next = pa;
pc = pa;
pa = pa->next;
}
else
{
pc ->next = pb;
pc = pb;
pb = pb->next;
}
}
pc->next = (pa ? pa : pb);
free(Lb); //为什么要释放Lb呢?而不释放La呢?
return OK;
}


[解决办法]
返回的Lc 指向了La,所以不能free La

Lc中的Lb的数据是从 Lb->next 开始插入的(pb = Lb->next;)

Lb这个指针还指向一个链表头 所以需要free

[解决办法]
其实1楼说的木有错嘛。对内存的理解啊,还得加强
[解决办法]
Lc与La指向同一处,只有释放Lb指向的地方了
[解决办法]

探讨

单循环链表的操作为什么要用二级指针作为参数呢? 我试过了若用一级指针的话 初始化链表之后 链表并不是空的
而用二级指针的话 调用函数LinkEmpty()之后 证明链表是空的 二级指针不是很少用吗?这里必须用二级指针吗?
typedef struct LinkListNode
{
LElemType data;
struct LinkListNode *next;
}LinkLis……

[解决办法]
探讨
单循环链表的操作为什么要用二级指针作为参数呢? 我试过了若用一级指针的话 初始化链表之后 链表并不是空的
而用二级指针的话 调用函数LinkEmpty()之后 证明链表是空的 二级指针不是很少用吗?这里必须用二级指针吗?
typedef struct LinkListNode
{
LElemType data;
struct LinkListNode *next;
}LinkList,……

读书人网 >C语言

热点推荐