已知单链表l(带头节点)是一个递增有序表,试编写一算法,删除表中值大于min且小于max的节点(若表中有这样的节点),同时释放被删节点的空间,这里min和max是两个给定参数。
时间: 2023-04-25 16:05:09 浏览: 126
实现在单链表中删去值相同的多余结点的算法.txt
算法如下:
1. 定义指针p和q,分别指向链表的头节点和第一个节点。
2. 从头节点开始遍历链表,如果当前节点的值大于等于min且小于等于max,则删除该节点,并释放空间,同时将p的next指向下一个节点,继续遍历。
3. 如果当前节点的值小于min,则将p指向当前节点,q指向下一个节点,继续遍历。
4. 如果当前节点的值大于max,则退出循环。
5. 返回删除后的链表。
代码如下:
void deleteNodes(Node* head, int min, int max) {
Node* p = head;
Node* q = head->next;
while (q != NULL) {
if (q->data >= min && q->data <= max) {
p->next = q->next;
free(q);
q = p->next;
} else if (q->data < min) {
p = q;
q = q->next;
} else {
break;
}
}
}
阅读全文