以下为单链表的创建算法,分析算法,请在处填上正确的语句。lklist create_lklist()//直接实现的建表算法{head=malloc(size);p=head;scanf(“%f”,&x);while(x!=’$’){q=malloc(size);q->data=x;p->next=q;(1) ;scanf(“%f”,&x);} (2);return(head);}
查看答案
若设单链表结点的结构为ListNode = (data, next),阅读以下函数:int unknown ( ListNode* Ha){// Ha为指向带表头结点的单链表的表头指针。intn = 0;ListNode *p = Ha->next;while( p!= 0 ){n++;p = p->next;}returnn;}若用单链表表示的线性表为L = ( a, b, c, d, e, f, g),其表头指针为L,则执行语句unknown (L)之后输出的结果是。
阅读下列算法,写出算法功能:voidunknown (ListNode *first ){ListNode*p= first->next,*q,*r;if(p!= 0 &&p->next != 0 ){q=p->next;p->next =0;while(q->next != 0 ){r=q->next;q->next =p;p=q;q=r;}q->next =p;first =q;}elsefirst =p;}算法的功能:____________________________________
阅读下列算法, 并把缺失的语句补上:ListNode * Merge(ListNode * L1, ListNode * L2){//将两个带表头结点的有序单链表合并成一个有序单链表。ListNode *p1=L1->first->next;ListNode *p2=L2->first->next;ListNode a;//a结点是结果有序单链表的表头结点ListNode*p=&a;//p指向结果有序单链表的表尾结点p->next=0;while ( p1 != 0 &&p2 != 0 ){//两个表非空时if(p1->datadata){(1);p1=p1->next;}else{p->next=p2;p2=p2->next;}(2);}if(p1!=0)p->next=p1;elsep->next=p2;return(3);}
阅读下列算法,并补充所缺语句voidpurge_nextst( ListL ){//从表头指针为 la 的带表头结点的有序链表中删除所有值相同的多余元素并释放被删结点空间。link p,q,t;ListItem temp;p= L->first->next;while(p != 0 ){q = p;temp = p->data;p=p->next;while( p != 0 &&(1) ){t=p;p=p->next;free(t);}(2);}}