删除非空有序递增链表L中值域大于min且小于max的所有结点的代码怎么写
时间: 2023-04-07 16:03:51 浏览: 105
带头结点的单循环链表,删除所有值大于min,小于max的结点的算法
可以使用双指针法,一个指针指向当前结点,另一个指针指向当前结点的前一个结点。如果当前结点的值在min和max之间,则将前一个结点的next指针指向当前结点的next指针,即跳过当前结点。否则,两个指针同时向后移动一个结点。需要注意的是,如果第一个结点的值在min和max之间,需要特殊处理,即将头结点指向第一个符合条件的结点。
代码如下:
```
ListNode* deleteNodes(ListNode* head, int min, int max) {
ListNode* dummy = new ListNode(0);
dummy->next = head;
ListNode* prev = dummy;
ListNode* curr = head;
while (curr != nullptr) {
if (curr->val > min && curr->val < max) {
prev->next = curr->next;
} else {
prev = curr;
}
curr = curr->next;
}
return dummy->next;
}
```
阅读全文