题解 | #删除链表峰值#
删除链表峰值
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; }