题解 | #删除链表峰值#

删除链表峰值

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

import java.util.*;

/*
 * public class ListNode {
 *   int val;
 *   ListNode next = null;
 *   public ListNode(int val) {
 *     this.val = val;
 *   }
 * }
 */

public class Solution {
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     * 
     * @param head ListNode类 
     * @return ListNode类
     */
    public ListNode deleteNodes (ListNode head) {
	    // 链表长度小于等于2的时候直接返回结果
        if (head == null || head.next == null || head.next.next == null) {
            return head;
        }
        ListNode pre = head;
        ListNode cur = head.next;
        ListNode next = cur.next;
        while (cur != null && cur.next != null) {
            if (pre.val < cur.val && cur.val > next.val) {
			   // 峰值节点,删除当前节点cur
                pre.next = cur.next;
			   // 更新pre
                pre = pre.next;
            } else {
			   // 非峰值节点,继续向后遍历
                pre = cur;
            }
		    // 边界判断,此时pre指向了最后一个节点,直接跳出循环返回结果
            if (pre.next == null) {
                break;
            }
            cur = pre.next;
            next = cur.next;
        }
        return head;
    }
}

这一题主要考察的是链表的遍历和删除,直接使用三个临时变量去遍历链表,但要注意边界值的判断

全部评论

相关推荐

不愿透露姓名的神秘牛友
07-11 17:10
什么素质,我请问呢,要掉小珍珠了。。。又憋屈又生气
苍蓝星上艾露:给它们能的,一群dinner牛马挥刀向更弱者罢了。我写的开源求职AI co-pilot工具,优化你的简历,找到你匹配的岗位,定制你的简历,并让你做好面试准备https://github.com/weicanie/prisma-ai
点赞 评论 收藏
分享
zYvv:双一流加大加粗再标红,然后广投。主要是获奖荣誉不够,建议开始不用追求大厂,去别的厂子刷下实习。
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务