设计一个算法,删除一个单链表L中元素值最大的节点。(假设最大值结点是唯一的)
时间: 2023-05-26 14:06:38 浏览: 230
试设计实现在单链表中删去值相同的多余结点的算法。
1. 定义一个变量max,初始值设为L的第一个节点的元素值。
2. 遍历L,比较每个节点的元素值和max的大小,如果当前节点的元素值大于max,则更新max为当前节点的元素值。
3. 重新遍历L,找到元素值等于max的节点,并删除该节点。
4. 返回删除节点后的单链表L。
算法实现如下:
```
Node* deleteMaxNode(Node* L) {
if (L == NULL) {
return NULL;
}
// 找到最大值
int max = L->val;
Node* p = L;
while (p != NULL) {
if (p->val > max) {
max = p->val;
}
p = p->next;
}
// 找到并删除最大值节点
p = L;
Node* pre = NULL;
while (p != NULL) {
if (p->val == max) {
if (pre == NULL) {
// 要删除的节点是第一个节点
L = p->next;
} else {
pre->next = p->next;
}
delete p;
break;
}
pre = p;
p = p->next;
}
return L;
}
```
阅读全文