- 题目如下
-设计一个算法, 删除递增有序链表中值大于min(i)且小于max(k)的所有
元素( i和k是给定的两个参数, 其值可以和表中的元素相同, 也可以不同) 算法思路:
-设置三个指针pre,cur,tail,front。front保留最后一个小于等于min的节点,cur用来遍历,tail保留第一个大于等于max的节点,pre保存cur,总是在cur的最前面一位,然后将front和tail链接起来。代码如下:
linkList* deleteLink(linkList* head,int min,int max)
{
linkList* cur = head->next;//指向第一个元素
linkList* front = (linkList*)malloc(sizeof(linkList));//指向最后一个小于等于最小值min的节点
linkList* tail = (linkList*)malloc(sizeof(linkList));//指向最后一个大于等于最大值max的节点
linkList* pre = (linkList*)malloc(sizeof(linkList));//保存cur,总是在cur的最前面一位
//如果链表的第一个数就大于最小值,则pre指向head头结点
if(cur->data > min)
{
pre = head;
}
//如果cur->data即当前值小于等于min,则往后推一个,直到cur->data大于min,则pre保存的节点为front节点
while(cur != NULL && cur->data <= min)
{
pre = cur;
cur = cur->next;
}
front = pre;//front指向pre所在节点
//下同
while(cur != NULL && cur->data <= max)
{
pre = cur;
cur = cur->next;
}
if(cur == NULL)
{
front->next = NULL;
return head;
}
tail = cur;
front->next = tail;
return head;
}
本文介绍了一种用于删除递增有序链表中所有值大于给定最小值且小于最大值的元素的算法。通过使用三个指针,算法能够直接在遍历过程中实现这一目标,而不需要对整个链表进行全扫描。此方法适用于需要快速筛选和调整链表结构的应用场景。
735

被折叠的 条评论
为什么被折叠?



