题解 | #删除链表峰值#

删除链表峰值

https://www.nowcoder.com/practice/30a06e4e4aa549198d85deef1bab6d25

解题思路

  • 构建三个指针,初始化时,第一个指针pre指向链表头,第二个指针node指向第一个指针的next,第三个指针next指向node的next。
  • 当第三个指针存在时,则比较pre->val和next->val是否小于node->val,如果是,则删除node,否则,三个指针都正常向后移动一位。

代码

/**
 * struct ListNode {
 *	int val;
 *	struct ListNode *next;
 *	ListNode(int x) : val(x), next(nullptr) {}
 * };
 */
#include <cstdlib>
class Solution {
public:
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     * 
     * @param head ListNode类 
     * @return ListNode类
     */
    ListNode* deleteNodes(ListNode* head) {
        // write code here

        ListNode* pre = head, *node = pre->next, *next = node->next;
        while (next) 
        {
            if(node->val>pre->val && node->val > next->val)
            {
                pre->next = next;
                free(node);
            }
            else {
                pre = pre->next;
            }
		  
            node = next;
            next = next->next;        
        }
        return head;
    }
};

复杂度分析

  • 时间复杂度:
  • 空间复杂度:
全部评论

相关推荐

评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务