已知一单链表按值递增有序,写一算法,删除表中值大于mink并且小于maxk的所有节点,并将所删除节点释放。
时间: 2023-04-27 22:04:06 浏览: 89
算法如下:
1. 定义指针p指向链表头节点,定义指针pre指向p的前一个节点。
2. 如果p的值大于等于mink并且小于等于maxk,则将pre的next指针指向p的next节点,释放p所指向的节点。
3. 如果p的值小于mink,则将pre指针指向p,p指针指向p的next节点。
4. 如果p的值大于maxk,则直接将p指针指向p的next节点。
5. 重复步骤2-4,直到p指针指向链表尾节点。
6. 返回链表头节点。
代码实现如下:
```
ListNode* deleteNodes(ListNode* head, int mink, int maxk) {
ListNode* p = head;
ListNode* pre = nullptr;
while (p != nullptr) {
if (p->val >= mink && p->val <= maxk) {
if (pre == nullptr) {
head = p->next;
} else {
pre->next = p->next;
}
ListNode* temp = p;
p = p->next;
delete temp;
} else if (p->val < mink) {
pre = p;
p = p->next;
} else {
p = p->next;
}
}
return head;
}
```
阅读全文