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

admin2014-12-08  23

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

解析
转载请注明原文地址:https://kaotiyun.com/show/0Oxi777K
0

最新回复(0)