试编写在带头结点的单链表中删除第一个最小值的节点的高效算法
时间: 2024-05-14 15:11:57 浏览: 8
1. 遍历单链表,找到最小值节点以及其前继节点。
2. 删除最小值节点,更新前继节点的指针。
3. 注意处理头结点的情况。
具体实现如下:
```
void deleteFirstMin(Node* head) {
if (head == nullptr || head->next == nullptr) {
return; // 空链表或只有头结点,直接返回
}
Node* prev = head;
Node* cur = head->next;
Node* minPrev = prev;
Node* minCur = cur;
while (cur != nullptr) {
if (cur->data < minCur->data) {
minPrev = prev;
minCur = cur;
}
prev = cur;
cur = cur->next;
}
if (minCur == head->next) {
// 第一个节点就是最小值节点,直接删除
head->next = minCur->next;
delete minCur;
} else {
// 删除最小值节点
minPrev->next = minCur->next;
delete minCur;
}
}
```