阅读以下函数说明和C语言函数,将应填入 (n) 处的字句写在对应栏内。
[说明]
函数void diff(Node*A,Node*B,Node**r)的功能是:根据两个由整数按升序构成的单链表L1和L2(分别由A,B指向)构造一个单链表L3(由*r指向),要求L3中的所有整数都是L1,并且不是L2中的整数,还要求L3中的所有整数都两两不等。
[C函数]
#include<malloc.h>
typedef struct node
int data;
struct node*next;
Node;
void diff(Node*A,Node*B,Node**r)
int lastnum;
Node*P;
*r=NULL;
if(!A) return;
while( (1) >
if(A->data<B->data)
lastnum=A->data;
p=(Node*)malloc(sizeof(Node));
P->data=lastnum;
P->next=*r;
(2) ;
do
A=A->next;
while( (3) >;
else iffA->data>B->data)
B=B->next;
else
(4) ;
lastnum=A->data;
while (A &&A->data==lastnum)A=A->next;
while(A)
lastnum=A->data;
p=(Node*)malloc(sizeof(Node));
P->data=lastnum;
(5) ;
*r=P;
while(A && A->data==lastnum) A=A->next;
参考答案:A&&B (2) *r==p (3) A&&A->data=lastnum (4) B=B->next (5) D->next==*r
解析:
程序的思路是:在链表A和链表B的指针均未到链尾时,从链表A取一个元素和链表B中第一个元素进行比较,所以(1)应填“A&&B”。如果链表A元素小于链表B的元素,则将链表A中元素直接插入链表C中,指针后移,则(2)填“*r=p”,在后移中屏蔽所有相同元素,则(3)应填“A&&A->data=lastnum”;如果链表A元素大于链表B的元素,将链表B指针后移;如果链表A元素等于链表B的元素,链表A和链表B的指针都向后移,即(4)填“B=B->next”。如果链表B已经到链尾,但链表A没有结束,则将链表A中的剩余元素加入到链表C中,所以(5)应填“p->next=*r”。