问题 填空题

[说明]
本程序中的函数void first_jnsert(NODE**p,int v)的功能是在已知链表的首表元之前插入一个指定的表元; 函数NODE *reverse_copy(NODE *p)的功能是按已知链表复制出一个新的链表,但新的链表的表元链接顺序与已知链表的表元链接顺序相反; 函数voidprint_link(NODE*p)用来输出链表中各表元的值; 函数void free_link(NODE*p)用来释放链表全部表元空间。
[函数]
#include <stdio.n>
#include <malloc.h>
typedef struct node
int val;
struct node *next;
NODE;
void first_insert (NODE **p,int v)

NODE *q= (NODE *) malloc (sizeof (NODE) ;
q->val=v;
(1) ;
*p= (2) ;

NODE *reverse_copy (NODE *p)
NODE *u;
for (u=NULL; p;p=p->next)
first_insert( (3) );
return u;

void print_link (NODE *p)

for (; (4) ) printf ("%d\t" ,p->val) ;
printf (" \n") ;

void free_link (NODE *p)
NODE *u;
while (p ! =NULL)
u=p->next ;
free (p);
(5) ;


void main ()
NODE *link1, *link2 ;
int i;
link1=NULL ;
for(i=1;i<=10;i++)
first_insert (&link1,i) ;
link2=reverse_copy (link1) ;
print_link (link1) ;
free_link (link1) ;
print_link (link2);
free_link (link2);

答案

参考答案:p=u

解析: 本题涉及的内容与链表有关。函数中的参数NODE **p为指向链表首位地址的指针。在链表中插入元素可以概括为对元素赋值和调整链表中元素指针两部分。函数first_insert(NODE **p,int v)是在已知链表的首表元之前插入一个指定的表元,空(1)应填q->next=*p,空(2)应填q。函数NODE *reverse_copy(NODE *p)是按已知链表复制出一个表元链接顺序相反的链表,空(3)应填&u,p->val。函数print_link(NODE*p)用来输出链表中各表元的值,空(4)应填p!=NULL;p++。函数free_link(NODE *p)用来释放链表全部表元空间,即空(5)应填p=u。

单项选择题
单项选择题 案例分析题