8.设计一个算法,删除递增有序链表中值大于mink且小于maxk的所有元素(mink和maxk是给定的两个参数,其值可以和表中的元素相同,也可以不同)。构造测试用例进行测试。(教材P51习题2.8)
时间: 2024-10-09 22:08:30 浏览: 76
对于这个问题,我们可以设计一个简单的迭代算法来解决。首先创建三个指针,`prev`, `current` 和 `next`,分别表示前驱节点、当前节点和下一个待判断的节点。开始时,设置 `prev` 为 `None`,`current` 设置为链表的头结点。
算法步骤如下:
1. 遍历链表:
a. 检查 `current` 的值是否满足条件(即 `current.val > mink && current.val < maxk`)。
b. 如果满足条件,则将 `current` 节点从链表中移除,通过更新 `prev.next` 为 `next` 来实现。如果 `current` 是头结点,同时满足条件,则更新头结点为 `next`。
c. 更新指针:如果 `current` 不满足条件,将其移动到下一位,即 `current = next`。如果 `current` 到达了链表的末尾,循环结束。
2. 完成遍历后,返回原链表的头部。
以下是伪代码形式:
```
def remove_elements(head, mink, maxk):
prev = None
current = head
while current is not None:
if current.val <= mink or current.val >= maxk:
if prev is not None:
prev.next = current.next
else:
head = current.next
else:
prev = current
current = current.next
return head
```
**测试用例**:
- 测试数据1:链表 [1, 2, 3, 4, 5], mink=2, maxk=4,预期结果:[1, 4, 5]
- 测试数据2:链表 [5, 6, 7, 8, 9, 10], mink=5, maxk=9,预期结果:[10]
- 测试数据3:链表 [1, 2, 3, 2, 4, 5], mink=2, maxk=2,预期结果:[2, 2]
阅读全文