6-8 链表的有序插入。 以下结点node定义了一个学生的信息。函数find查找并返回小于num,且下一节点不小于num的结点指针。函数insert按递增顺序插入新学生。测试主函数从键盘输入5个,调用insert函数插入链表,并输出链表内容。请补全程序,完成相应的功能。 #include
#include
struct node { int num; /*学生的*/ struct node *next; /*指向下一结点*/ }; struct node *find(struct node *head,int num) {/*1如果head为空链表,则返回空指针。2如果第一个结点的不小于num,也返回空指针。3如果最后一个结点的仍小于num,则返回最后一个结点指针。4如果当前结点的小于num且下一结点不小于num,则返回当前结点的指针*/ struct node *p, *q; if(head==NULL || head->num>=num) return NULL;/*head为空链表时或第一个结点的不小于num时返回空指针*/ for ( p=head; p!=NULL; p=p->next ) { q = p->next; if (( (1) )) /*条件*/ return p; } } struct node *insert(struct node *head,int num) {/*按顺序插入新结点,新结点的为num*/ struct node *p, *q; p = (struct node *) ( (2) ) ;/*分配内存空间*/ p->num = num; q = find(head,num);/*找到插入位置在q的后面*/ if (q==NULL) { /*插入到链表头*/ p->next = head; return p; } ( (3) ) ;/*插入到q的后面*/ q->next = p; return head; } int main() { struct node *head=NULL, *p; int i, num; for ( i=0; i<5; i++ ) { scanf( "%d", &num ); head=insert(head,num); } for ( p=head; p!=NULL; p=p->next ) printf( "%d ", p->num ); printf("\n"); return 0; } 【输入输出样例】