阅读以下函数说明和C语言函数,将应填入(n)处的字句写在对应栏内。 [说明] 函数void diff(Node*A,Node*B,Node**r)的功能是:根据两个由整数按升序构成的单链表L1和L2(分别由A,B指向)构造一个单链表L3(由

admin2010-12-16  30

问题 阅读以下函数说明和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;
   }
   }

选项

答案(1) 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”。
转载请注明原文地址:https://jikaoti.com/ti/3XW7FFFM
0

最新回复(0)