在链式有序表的合并中,假设头指针为 LA 和 LB 的单链表分别为线性表 LA 和 LB 的存储结构,归并 LA 和 LB 得到单链表 LC。
网上很多教材的算法描述里,最后都要把 LB 的头结点释放掉,就这一点我想不明白。请问:
1、为什么要释放 LB 的头结点?
2、那么释放掉头结点的线性表 LB 是不是就不存在了(被删掉)?
3、如果2的答案是「是」,那么为什么合并线性表 LA 和 LB 之后要只剩下 LA 和 LC ?不应该是三个表都保留吗?
就是想不明白释放 LB 头结点是为了什么,可能我有些基础的概念遗漏了?请各位指点一下。
void MergeList_L(LinkList &LA, LinkList &LB, LinkList &LC)
{
pa = LA->next; pb = LB->next;
LC = LA;
pc = LC;
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;
delete LB;
}
}
这文字编辑器搞得我都疯了...Markdown 格式嚒,我还是去学一下再来回复
1 void MergeList_L(LinkList &LA, LinkList &LB, LinkList &LC) {
2 pa = LA->next; pb = LB->next;
3 LC = LA;
4 pc = LC;
5 while(pa && pb) {
6 if(pa->data <= pb->data) {
7 pc->next = pa;
8 pc = pa;
9 pa = pa->next;
10 } else {
11 pc->next = pb;
12 pc = pb;
13 pb = pb->next;
14 }
15 pc->next = pa ? pa : pb;
16 delete LB;
17 }
18 }
首先, LA/ LB / LC 都是指针
那么,第3行已经让LC 指向LA,所以删除LA就是删除LC所指的空间。