主题:关于线性表的题目
题目是:
函数DelA_insB(LinkedList La,LinkedList Lb,int key1,int key2,int len)的功能是:将线形表A中关键码为Key1的结点开始的len个结点,按原顺序移至线形表B中关键码为Key2的结点之前,若移动成功,则返回0,否则返回-1。线形表的存储结构为带头结点的单链表,La为表A的头指针,Lb为表B的头指针。单链表结点的类型定义为:
typedef struct node {
int key;
struct node *next;
}*Linkedlist;
函数
int DelA_InsB(LinkedList La,LinkedList Lb,int key1,int key2,int len){
LinkdeList p,q,s,prep,pres;
int k;
if(!La->next || !Lb->next || len<=0) return -1;
p=La->next;prep=La;
while(p&&p->key!=key1){ /*查找表A中键值key1的结点*/
prep=p;p=p->next;
}
if(!p)return -1; /*在表A中不存在键值为key1的结点*/
q=p;k=1;
while(q&&k<len){ /*在表A中找出待删除的len个结点*/
q=q->next,k++;
}
if(!q) return -1; /*表A中不存在要被删除的len个结点*/
s=Lb->next;
while(s&&s->key!=key2){ /*查找表B中键值key2的结点*/
pres=s;s=s->next;
}
if(!s) return -1; /*表B中不存在键值为key2的结点*/
prep->next=q->next; /*将表A中的len个结点删除*/
q->next=s;
pres->next=p; /*将len个结点移动至表B*/[color=FF0000](这行看不懂)[/color]
return 0;
}
那行我的理解是:那把线形表Lb的头结点的指针域指向P,这样一来,那么原来线形表Lb中关键码为key2的结点之前的结点不是全被删除了吗?而题目只要求我们插入,并没有要我们删除啊.
函数DelA_insB(LinkedList La,LinkedList Lb,int key1,int key2,int len)的功能是:将线形表A中关键码为Key1的结点开始的len个结点,按原顺序移至线形表B中关键码为Key2的结点之前,若移动成功,则返回0,否则返回-1。线形表的存储结构为带头结点的单链表,La为表A的头指针,Lb为表B的头指针。单链表结点的类型定义为:
typedef struct node {
int key;
struct node *next;
}*Linkedlist;
函数
int DelA_InsB(LinkedList La,LinkedList Lb,int key1,int key2,int len){
LinkdeList p,q,s,prep,pres;
int k;
if(!La->next || !Lb->next || len<=0) return -1;
p=La->next;prep=La;
while(p&&p->key!=key1){ /*查找表A中键值key1的结点*/
prep=p;p=p->next;
}
if(!p)return -1; /*在表A中不存在键值为key1的结点*/
q=p;k=1;
while(q&&k<len){ /*在表A中找出待删除的len个结点*/
q=q->next,k++;
}
if(!q) return -1; /*表A中不存在要被删除的len个结点*/
s=Lb->next;
while(s&&s->key!=key2){ /*查找表B中键值key2的结点*/
pres=s;s=s->next;
}
if(!s) return -1; /*表B中不存在键值为key2的结点*/
prep->next=q->next; /*将表A中的len个结点删除*/
q->next=s;
pres->next=p; /*将len个结点移动至表B*/[color=FF0000](这行看不懂)[/color]
return 0;
}
那行我的理解是:那把线形表Lb的头结点的指针域指向P,这样一来,那么原来线形表Lb中关键码为key2的结点之前的结点不是全被删除了吗?而题目只要求我们插入,并没有要我们删除啊.