已知线性表中的元素(整数)以值递增有序排列,并以单链表作为存储结构。写一个高效算法,删除表中所有大于mink且小于maxk的元素(若表中有这样的元素)分析算法的时间复杂度(注意:mink和maxk是给定的两个参变量,它们的值为任意整数)。写出这一算法
时间: 2024-05-25 11:15:08 浏览: 117
已知线性表中的元素以值递增有序排列,并以单链表作存储结构。试写一高效的算法,删除表中所有值相同的多余元素(使得操作后的线性表中所有元素的值均不相同)
算法描述:
1. 定义两个指针:p和q,分别指向头结点和p的前继结点
2. 从头结点开始扫描链表
3. 如果当前结点的值介于mink和maxk之间,则将当前结点从链表中删除,并更新p和q的位置
4. 否则,继续扫描下一个结点
5. 最终返回删除后的链表
时间复杂度:O(n)
算法代码(C语言):
typedef struct Node {
int data;
struct Node* next;
} Node;
Node* delete(Node* head, int mink, int maxk) {
Node* p = head;
Node* q = NULL;
while (p != NULL) {
if (p->data > mink && p->data < maxk) {
if (q == NULL) { // delete head node
head = p->next;
} else {
q->next = p->next;
}
Node* tmp = p;
p = p->next;
free(tmp);
} else {
q = p;
p = p->next;
}
}
return head;
}
阅读全文