设有一个正整数序列组成的有序单链表(按递增次序有序,且允许有相等的整数存在),试编写能实现下列功能的算法:(要求用最少的时间和最小的空间)
(1)
确定在序列中比正整数
x
大的数有几个(相同的数只计算一次,如序列
{20,20,17,16,15,15,11,10,8,7,7,5,4}
中比
10
大的数有
5
个);
(2)
在单链表将比正整数
x
小的数按递减次序排列;
(3)
将正整数(比)
x
大的偶数从单链表中删除。【东北大学
2001
二
(17
分
)
】
struct
Node
...
{
int value;
struct Node * next;}
struct Node * start ;
struct Node * xstart = 0 ;
struct Node * xend = 0 ;
struct Node * temp = start;
struct Node * pre = start;
struct Node * saved = 0 ;
int cout;
while (temp != 0 && temp -> value < x) ... {
if(pre!=0)...{
saved=temp->next;
temp->next=pre;
pre=temp;
temp=saved;
}
else...{
//pre=start;
temp=temp->next;
}
}
// pre->next=(temp==start)?0:temp;
start -> next = temp;
temp = start;
start = pre;
pre = start;
while (temp! = 0 && temp -> value == x)pre = temp;
while (temp != 0 && temp -> value > x) ... {
cout++;
saved=temp->next;
if(temp->value%2==0)...{pre->next=saved;}
else pre=temp;
}
int value;
struct Node * next;}
struct Node * start ;
struct Node * xstart = 0 ;
struct Node * xend = 0 ;
struct Node * temp = start;
struct Node * pre = start;
struct Node * saved = 0 ;
int cout;
while (temp != 0 && temp -> value < x) ... {
if(pre!=0)...{
saved=temp->next;
temp->next=pre;
pre=temp;
temp=saved;
}
else...{
//pre=start;
temp=temp->next;
}
}
// pre->next=(temp==start)?0:temp;
start -> next = temp;
temp = start;
start = pre;
pre = start;
while (temp! = 0 && temp -> value == x)pre = temp;
while (temp != 0 && temp -> value > x) ... {
cout++;
saved=temp->next;
if(temp->value%2==0)...{pre->next=saved;}
else pre=temp;
}