已知带头结点的递增单链表L,设计一个算法,删除表中值大于min且小于max的结点,同时释放被删除的结点空间,min和max通过参数给定。
时间: 2024-05-19 16:16:13 浏览: 43
带头结点的单循环链表,删除所有值大于min,小于max的结点的算法
算法如下:
1. 定义指针p和q,分别指向链表的头结点和第一个结点。
2. 循环遍历链表,如果q指向的结点的值大于min且小于max,则删除该结点。
3. 在删除结点时,需要用指针r保存q结点的后继结点,然后将p结点的next指针指向r,同时释放q结点的空间。
4. 如果q结点的值不满足要求,则将p和q向后移动一个结点。
5. 循环直到q指向null,结束算法。
代码实现如下:
void deleteNodeInRange(Node* L, int min, int max) {
Node* p = L;
Node* q = L->next;
while (q != NULL) {
if (q->data > min && q->data < max) {
Node* r = q->next;
p->next = r;
delete q;
q = r;
} else {
p = q;
q = q->next;
}
}
}
阅读全文