题解 | #删除链表峰值#

删除链表峰值

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

知识点

单链表,数据结构

思路

用两个指针p,q维护连续的3个数的大小关系,初始化时p为head,其中q始终在p的指向,每次依据题目所给的限定条件进行指针的迭代转移,如果不符合题目条件,就正常遍历。详情请看代码

代码 C++

/**
 * struct ListNode {
 *	int val;
 *	struct ListNode *next;
 *	ListNode(int x) : val(x), next(nullptr) {}
 * };
 */
class Solution {
public:
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     * 
     * @param head ListNode类 
     * @return ListNode类
     */
    ListNode* deleteNodes(ListNode* head) {
        // write code here
        if(!head||!head->next)return head;
        else
        {
            ListNode* p=head;//初始化
            ListNode* q=p->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=p->next;
                }
           
              } 
              return head;
       }
       
    }
};
#数据结构#
全部评论

相关推荐

点赞 收藏 评论
分享
牛客网
牛客企业服务