📄 2.16.c
字号:
2.16③ 已知指针la和lb分别指向两个无头结点单链表中
的首元结点。 下列算法是从表la中删除自第i个元素起共
len个元素后,将它们插入到表lb中第i个元素之前。试问
此算法是否正确? 若有错,则请改正之。
实现下列函数:
Status DeleteAndInsertSub(LinkList &la, LinkList &lb,
int i, int j, int len);
// la和lb分别指向两个单链表中第一个结点, */
/* 本算法是从la表中删去自第i个元素起共len个元素,*/
/* 并将它们插入到lb表中第j个元素之前, */
/* 若lb表中只有j-1个元素,则插在表尾。 */
单链表类型定义如下:
typedef struct LNode{
ElemType data;
struct LNode *next;
} LNode, *LinkList;
Status DeleteAndInsertSub(LinkList &la, LinkList &lb,
int i, int j, int len)
// la和lb分别指向两个单链表中第一个结点, */
/* 本算法是从la表中删去自第i个元素起共len个元素,*/
/* 并将它们插入到lb表中第j个元素之前, */
/* 若lb表中只有j-1个元素,则插在表尾。 */
{
LinkList p,q,s,prev;
int k;
if(i<=0||j<=0||len<=0)return INFEASIBLE;
p=la;k=1;
while(p&&k<i)
{
prev=p;p=p->next;k++;
}
if(!p) return INFEASIBLE;
q=p;k=1;
while(q&&k<len)
{
q=q->next;k++;
}
if(!q) return INFEASIBLE;
if(i==1) la=q->next;
else prev->next=q->next;
if(j==1){q->next=lb; lb=p;}
else{
s=lb;k=1;
while(s&&k<j-1){s=s->next;k++;}
if(!s) return INFEASIBLE;
q->next=s->next;s->next=p;
}
return OK;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -