设非空双向循环链表L的头指针为head,表结点类型为DLNode,定义如下。
typedef int DataType;
typedef struct dlode
{ DataType data; //data是数据域
struct dlnode * prior, *next; // prior指向前趋结点,next指向后继结点
}DLNode;
typedef DLNode * DLinkList;
初始时,L中所有结点的prior域均为空(NULL),next域和data域中已经正确赋值。如题30图a所示。

函数f30完成的功能是:将L中各结点的prior域正确赋值,使L成为双向循环链表。如题30图b所示。

将空白处应填写的内容答在答题卡上。
void f30( DLinkList head)
{ DLNode *p;
p=head;
while(p->next!=____(1)____)
{ ____(2)____=p;
p=p->next;
}
____(3)____=p;
}