写个函数找到单链表L中的最小的节点,并删除重复的最小节点。
时间: 2024-12-29 18:36:59 浏览: 8
当然可以。这里有一个C++函数示例,用于找到单链表`L`中的最小值节点,并删除所有重复的最小值节点。假设我们有如下结构定义:
```cpp
struct ListNode {
int val;
ListNode* next;
ListNode(int x) : val(x), next(NULL) {}
};
```
函数`deleteMinDuplicates(ListNode*& head)`可以按需编写:
```cpp
ListNode* deleteMinDuplicates(ListNode* &head) {
if (!head || !head->next) { // 检查链表是否为空或只有一个元素
return head;
}
ListNode* dummy = new ListNode(0); // 创建虚拟头节点,方便操作
dummy->next = head;
ListNode* current = head;
int minVal = current->val;
while (current) {
if (current->val < minVal) { // 更新最小值
minVal = current->val;
}
if (current->val == minVal) { // 找到重复最小值
ListNode* prev = dummy;
while (prev->next != current && prev->next->val == minVal) {
prev = prev->next;
}
prev->next = current->next;
delete current;
}
current = current->next;
}
dummy->next = head; // 移除虚拟头节点
return dummy->next;
}
```
此函数首先检查链表是否为空或只有一个元素。然后创建一个虚拟头节点以便于处理边界情况。接着遍历链表,记录最小值并在找到重复值时删除它。最后返回去掉重复最小值后的实际头节点。
阅读全文