【说明】 函数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, LinkdeList Lb,int key1,int key2,,int len) { LinkedList p,q,s,prep,pres; int k; if( ! La->next || ! Lb-> next ||| en <=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 && (1) )} /*表A中不存在要被删除的len个结点*/ (2) ;k++; } if( ! q)return -1; /*表A中不存在要被删除的len个结点*/ s = Lb -> next; (3) ; while(s && s -> key != key2) { /*查找表B中键值为key2的结点*/ pres =s;s =s->next; } if( ! s) return - t; /*表B中不存在键值为key2的结点*/ (4) =q-> next;/*将表A中的len个结点删除*/ q->next= (5) ; pres -> next = p; /*将len个结点移至表B */ return 0; }
参考答案:
解析:(1)k<len (2)q=q->next或q=(*q).next (3)pres=Lb (4)prep->next或(*prep).next (5)s或pres->next或(*pres).next (1)此处while循环应当循环至k等于len结束,所以应填入k<len。(2)此处语句表示链表前进一个结点,应填入q=q->next或q=(*q).next。(3)此处语句为指针pres赋初值,使他指向s的上一结点。(4)修改指针prep,使prep指向q的下一结点。(5)此处语句为修改指针q,q指向s或者pres的下一结点,达到将A中的len个结点删除的目的。