设计一个算法,删除一个单链表l中元素值最大的结点
时间: 2023-04-26 20:00:23 浏览: 197
算法如下:
1. 定义一个指针p指向链表头节点,一个指针q指向p的前一个节点,一个指针max指向当前最大值节点,初始时max指向头节点。
2. 遍历链表,如果当前节点的值大于max节点的值,则更新max指针。
3. 遍历完成后,如果max指针指向头节点,则直接删除头节点,否则删除max节点。
4. 删除节点时,将q的next指针指向max的next节点即可。
5. 返回删除后的链表。
代码实现如下:
```
ListNode* deleteMaxNode(ListNode* head) {
if (head == nullptr) {
return nullptr;
}
ListNode* p = head;
ListNode* q = nullptr;
ListNode* max = head;
while (p != nullptr) {
if (p->val > max->val) {
max = p;
}
p = p->next;
}
if (max == head) {
head = head->next;
} else {
q = head;
while (q->next != max) {
q = q->next;
}
q->next = max->next;
}
delete max;
return head;
}
```