题解 | #删除链表峰值#

删除链表峰值

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

  1. 题目考察的知识点

遍历链表以及删除链表节点

  1. 题目解答方法的文字分析

题目中要求删除链表中比前后结点值都大的牛的编号,即遍历整个链表,找出链表中比前后结点值都大的值,然后删除掉。因为要和前后节点值比较,我们可以用创建pre,curr,last3个结点,分别代表前结点,当前结点以及后结点。由于,链表的首尾结点不用删除,所以可以用last!=null作为链表是否遍历完毕的条件。然后在遍历链表的过程中比较curr与其前后结点的值,找出符合条件的curr结点删除即可。 注意:本题目不要求一次遍历之后,还存在的链表峰值也删除。

  1. 本题解析所用的编程语言

java

  1. 完整且正确的编程代码:
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) {
            if(head==null||head.next==null||head.next.next==null)
                     return head;
            ListNode dummy=new ListNode(0-1);
            ListNode pre = head;
            ListNode curr =head.next;
            ListNode last =curr.next;
            dummy.next = pre;
            
            while(last!=null){
               if(curr.val>pre.val&&curr.val>last.val){
                   pre.next=curr.next;
                   curr=curr.next;
                   last=last.next;
                  
               }else{
                   pre=pre.next;
                   curr=curr.next;
                   last=last.next;
                   
               }
            }

            return head;
    }
}
#喜刷刷大赛,刷题领礼包#
全部评论

相关推荐

11-27 12:36
已编辑
门头沟学院 前端工程师
Apries:这个阶段来说,很厉害很厉害了,不过写的简历确实不是很行,优势删掉吧,其他的还行
点赞 评论 收藏
分享
评论
点赞
收藏
分享
牛客网
牛客企业服务