sub( amp ) C语言,2020考研计算机《数据结构(C语言版)》详解答案(18)

本文解析了2020年计算机考研复习中关于数据结构部分的一道题目,涉及C语言实现从一个链表中删除并插入元素到另一个链表的操作。给出了原始算法并指出错误,然后提供修正后的代码,旨在帮助考生理解链表操作技巧。
摘要由CSDN通过智能技术生成

2020年计算机考研复习已经开始,新东方在线在此整理了2020考研计算机《数据结构(C语言版)》详解答案(18),希望能帮助大家!

已知指针la和lb分别指向两个无头结点单链表中的首元结点。下列算法是从表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(knext; k++; }

s->next=p; q->next=s->next;

return OK;

}

解:

Status DeleteAndInsertSub(LinkList &la,LinkList &lb,int i,int j,int

len)

{

LinkList p,q,s,prev=NULL;

int k=1;

if(i<0||j<0||len<0) return INFEASIBLE;

// 在la表中查找第i个结点

p=la;

while(p&&k

prev=p;

p=p->next;

k++;

}

if(!p)return INFEASIBLE;

// 在la表中查找第i+len-1个结点

q=p; k=1;

while(q&&k

q=p->next;

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;

lb=p;

}

else{

s=lb; k=1;

while(s&&k

s=s->next;

k++;

}

if(!s)return INFEASIBLE;

q->next=s->next;

s->next=p; //完成插入

}

return OK;

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值