首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

严蔚敏数据结构P31算法2.12MergeList-L中 free(Lb)如何理解

2012-08-16 
严蔚敏数据结构P31算法2.12MergeList-L中 free(Lb)怎么理解?Status MergeList(LinkList *La, LinkList *Lb

严蔚敏数据结构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,……

热点排行