考察的知识点:双指针、链表、链表节点的删除;
解答方法分析:遍历链表,若链表仅有首节点则直接返回首节点,若链表仅有收尾节点则不进循坏,同样返回首节点。若链表长度大于等于三,将每个节点的值与其前后节点的值进行比较,如果该节点的值比前后值都大,则删除该节点;
所用编程语言: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; } };