问答题
设有一个由正整数组成的无序(后向)单链表,编写能够完成下列功能的算法:
(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;