问题 问答题

设有一个由正整数组成的无序(后向)单链表,编写能够完成下列功能的算法: (1) 找出最小值结点,且打印该数值。 (2) 若该数值为奇数,则将其与直接后继结点的数值交换。 (3) 若该数值为偶数,则将其直接后继结点删除。

答案

参考答案:

解析:算法的思想是:采用从前向后扫描单链表的方法,边扫描边测试,根据测试结点执行相应的操作。算法描述如下: int Function(LinkList* la) { int temp; LinkNode* p=L->next;//单链表为空时返回 LinkNode* q=p; if(p==NULL) return 0; /*找到最小值结点*/ while(p!=NULL) { if(p->data<q->data) q=P: p=P->next; } /*打印最小值结点*/ printf("Min:%d\n",p->data); /*功能点:若该数值为奇数,则将其与直接后继结点的数值交换*/ if(q->data%2==1) { temp=q->data; if(q->next==NULL)//不存在直接后继结点 return 0; q->data=q->next->data; q->next->data=temp; } /*功能点:若该数值为偶数,则将其直接后继结点删除*/ else { if(q->next==NULL) return 0; p=P->next; q->next=P->next; free(p); } return 1;

单项选择题 A1型题
材料分析题