考察的知识点:双指针、链表、链表节点的删除;

解答方法分析:遍历链表,若链表仅有首节点则直接返回首节点,若链表仅有收尾节点则不进循坏,同样返回首节点。若链表长度大于等于三,将每个节点的值与其前后节点的值进行比较,如果该节点的值比前后值都大,则删除该节点;

所用编程语言:C++;

完整编程代码:↓

/**
 * struct ListNode {
 *  int val;
 *  struct ListNode *next;
 *  ListNode(int x) : val(x), next(nullptr) {}
 * };
 */
class Solution {
  public:
    ListNode* deleteNodes(ListNode* head) {
        if (head->next == nullptr) return head;
        ListNode* pre = head;
        ListNode* node = head->next;
        while (node->next != nullptr) {
            if (node->val > pre->val && node->val > node->next->val) {
                pre->next = node->next;
            }
            pre = node;
            node = node->next;
        }
        return head;
    }
};