写出算法

来源:百度知道 编辑:UC知道 时间:2024/09/23 07:33:32
已知线性表中的元素以值递增的有序排列,并以单链表做存储结构,是写一高效的算法,删除表中所有值大于mink且小于maxk的 元素(若表中存在这样的元素)

// hello, enjoy it
1.假设单链表的节点数据结构为
struct node
{
TYPE data;
node* pnext;
};
2.假设链表的第一个节点的指针为first.
3.删除不在范围内的节点的方法如下:
node* tmp;
//首先删除不在范围内的第一个节点
while(first->data>mink||first->->data<maxk)
{
tmp = first;
first = first->next; //新的第一个节点
delete tmp;
}
//遍历后面的节点
node* pprenode = first; //当前节点的前一个节点。
for(node* pcurrentnode=first->next;pcurrentnode != null;node* pcurrentnode = pcurrentnode->next)
{
if(pcurrentnode->data>mink||pcurrentnode->data<maxk)
{
pprenode = pcurrentnode->next;
pcurrentnode = pprenode; //更新当前节点,原来的当前节点被删除了!
delete pcurrentnode;
}
pprenode = pcurrentnode; // 记录当前节点的指针,
}
//注意的问题,在实际编程时防止指针访问越界,这里没有仔细考虑这个问题。^^

3+3+3+3+3+3+3