调用linkAndMove后链表la尾节点为何从NULL变为lb的5节点?
问题原因
- 你调用
Union函数时,是把la直接作为第三个参数lc传入的,所以linkAndMove里的finNode指针全程操作的就是la链表的尾节点。 - 当
la的遍历指针pNode走到NULL时,触发了如下逻辑:
if (pNode == NULL) { linkFlag = moveFlag = 1; }
此时linkAndMove进入linkFlag=1的分支,执行(*finNode)->next = (*qNode);,这里是直接把lb中指向值为5的节点的指针赋值给了la尾节点的next字段,而不是新创建节点拷贝值,相当于直接把lb的5节点挂到了la的尾部,la的尾节点自然就从NULL变成指向该5节点了。
额外注意的代码问题
你的代码里存在无效内存申请,会导致内存泄漏:
(*finNode)->next = (slink *) malloc(sizeof(MemLEN)); (*finNode)->next = (*qNode);
第一行malloc申请的内存地址,第二行直接被(*qNode)的地址覆盖,申请的内存再也无法被释放,属于冗余代码,直接删掉第一行malloc即可。
内容的提问来源于stack exchange,提问作者Akari_Chiyuki
相关产品推荐
相关产品推荐

