---
解:
void MergeList_L(LinkList &ha,LinkList &hb,LinkList &hc) { }
2.16 已知指针la和lb分别指向两个无头结点单链表中的首元结点。
----
LinkList pa,pb; pa=ha; pb=hb;
while(pa->next&&pb->next){ }
if(!pa->next){ } else{ }
hc=ha;
while(pa->next) pa=pa->next; pa->next=hb->next; hc=hb;
while(pb->next) pb=pb->next; pb->next=ha->next; pa=pa->next; pb=pb->next;
---
下列算法是从表la中删除自第i个元素起共len个元素后,将它们插入到表lb中第i个元素之前。试问此算法是否正确?若有错,请改正之。
Status DeleteAndInsertSub(LinkedList la,LinkedList lb,int i,int j,int len) { if(i<0||j<0||len<0) return INFEASIBLE; p=la; k=1;
while(knext; k++; } q=p;
while(k<=len){ q=q->next; k++; } s=lb; k=1;
while(k
} 解:
Status DeleteAndInsertSub(LinkList &la,LinkList i,int j,int len) { LinkList p,q,s,prev=NULL;
int k=1;
----
&lb,int ---
if(i<0||j<0||len<0) return INFEASIBLE; // 在la表中查找第i个结点 p=la;
while(p&&k
if(!p)return INFEASIBLE; // 在la表中查找第i+len-1个结点 q=p; k=1; while(q&&k
if(!q)return INFEASIBLE;
// 完成删除,注意,i=1的情况需要特殊处理 if(!prev) la=q->next; else prev->next=q->next;
// 将从la中删除的结点插入到lb中 if(j=1){
q->next=lb;
----
prev=p; p=p->next; k++;
q=p->next; k++;
---
}
}
lb=p;
else{ }
return OK;
s=lb; k=1; while(s&&k
if(!s)return INFEASIBLE; q->next=s->next; s->next=p; //完成插入
s=s->next; k++;
2.17 试写一算法,在无头结点的动态单链表上实现线性表操作Insert(L,i,b),并和在带头结点的动态单链表上实现相同操作的算法进行比较。
2.18试写一算法,实现线性表操作Delete(L,i),并和在带头结点的动态单链表上实现相同操作的算法进行比较。
2.19 已知线性表中的元素以值递增有序排列,并以单链表作存储结构。试写一高效的算法,删除表中所有值大于mink且小于maxk的元素(若表中存在这样的元素),同时释放被删结点空间,并分析你的
----