删除带头结点的单链表中值最大的结点
时间: 2024-04-30 16:19:27 浏览: 110
如果链表为空或者只有一个结点,那么就没有结点可以删除,直接返回链表头节点即可。
如果链表有多结点,我们需要先找到值最大结点,然后将其从链表中。具体步骤如下:
1. 定义一个指针变量 `prev` 指向头结点的前一个结点,指针变量 `p 指向头结点;
2. 定义一个变量 `max_value` 保存当前找到的最大值,初始化为头结点的值;
3. 遍历链表,如果当前结点的值大于 `max_value`,则更新 `max_value` 和指向最大值结点的指针变量 `max_node`;
4. 遍历完成后,如果 `max_node` 指向的是头结点,则直接删除头结点,否则删除 `max_node`;
5. 返回链表头节点。
具体实现如下(假设链表中存储的是整数):
```c++
ListNode* deleteMaxNode(ListNode* head) {
if (head == nullptr || head->next == nullptr) {
return head;
}
ListNode* prev = head;
ListNode* p = head->next;
ListNode* max_node = head;
int max_value = head->val;
while (p != nullptr) {
if (p->val > max_value) {
max_value = p->val;
max_node = p;
}
prev = p;
p = p->next;
}
if (max_node == head) {
head = head->next;
} else {
prev->next = max_node->next;
}
delete max_node;
return head;
}
```
阅读全文