问答题 设有一个正整数序列组成的有序单链表(按递增次序有序,且允许有相等的整数存在),试编写能实现下列功能的算法:(要求用最少的时间和最小的空间。)(1)确定在序列中比正整数x大的数有几个(相同的数只计算一次,如序列{20,20,17,16,15,15,11,10,8,7,7,5,4}中比10大的数有5个);(2)在单链表中将比正整数x小的数按递减次序排列;(3)将正整数(比)x大的偶数从单链表中删除。【东北大学2001二(17分)】
【正确答案】正确答案:确定比正整数x大的数有几个属于计数问题,相同数只计一次,要求记住前驱,前驱和后继值不相等时移动前驱指针,进行计数。将比正整数x小的数按递减排序,属于单链表的逆置问题。比正整数x大的偶数从表中删除,属于单链表中结点的删除,必须记住其前驱,以使链表不断链。算法结束时,链表中结点的排列是:小于x的数按递减排列,接着是x(若有的话),最后是大干x的奇数。顺便指出,“递增有序”是指后继元素大于前驱元素,不允许有相同值的元素。题中所给例子序列与题目的论述并不一致。
【答案解析】