题解 | #删除链表峰值#
删除链表峰值
https://www.nowcoder.com/practice/30a06e4e4aa549198d85deef1bab6d25
知识点:
链表操作
分析:
我们维护三个指针, 他们分别指向第一二三个节点(a,b,c)当b的值大于a和c的时候就删除这个b节点 (在链表中将a->next赋值为c的地址),此时需要把原来指向b的指针指向c, 把指向c的指针指向d,当不满足上条的条件时, 需要a, b, c的指针整体后移到b, c, d
编程语言:
C++
完整代码:
struct ListNode {
int val;
struct ListNode *next;
ListNode(int x) : val(x), next(nullptr) {}
};
ListNode* deleteNodes(ListNode* head) {
if (!head || !head->next) return head;
auto p = head;
auto q = head->next;
while (q->next) {
if (p->val < q->val && q->val > q->next->val) {
p->next = q->next;
q = q->next;
} else {
p = q;
q = q->next;
}
}
return head;
}
