下列给定程序中已建立一个带头结点的单向链表,链表中各节点按节点数据域中的数据递增有序链接。函数fun的功能是:把形参x的值放入一个新节点并插入列表中使插入后各节点数据域中的数据仍保持递增有序。
请在程序的下画线处填入正确的内容并将下画线删除,使程序得出正确的结果。
试题程序。
#include
#include
#define N 8
typedef struct list
{
int data;
struct list *next;
} SLIST;
void fun(SLIST *h, int x)
{
SLIST *p, *q, *s;
s = (SLIST *)malloc(sizeof(SLIST));
s->data =
1
;
q = h;
p = h->next;
while (p != NULL && x > p->data)
{
q =
2
;
p = p->next;
}
s->next = p;
/********** found **********/
q->next =
3
;
}
SLIST *crealist(int *a)
{
SLIST *h, *p, *q; int i;
h = p = (SLIST *)malloc(sizeof(SLIST));
for (i = 0; i < N; i++)
{
q = (SLIST *)malloc(sizeof(SLIST));
q->data = a[i]; p->next = q; p = q;
}
p->next = 0;
return h;
}
void outlist(SLIST *h)
{
SLIST *p;
p = h->next;
if (p == NULL)
printf("\nThe list is NULL!\n");
else
{
printf("\nHead");
do
{
printf("->%d", p->data);
p = p->next;
}
while (p != NULL);
printf("NULL");
printf("->End\n");
}
}
main( )
{
SLIST *head; int x;
int a[N] = (11, 12, 15, 18, 19, 22, 25, 29);
head = creatlist(a);
printf("\nThe list before inserting:\n");
oulist(head);
printf("\nEnter a number: "); scanf("%d", &x);
fun(head, x);
printf("\nThe list after intserting:\n");
outlist(head);
}