反转链表

这道题和上面的反转链表其实是异曲同工的,主要考察链表遍历的操作,反转链表题解链接如上所示。

需要注意的是需要删除所有的峰值,所以要用到循环了

因为链表长度[0, 10000]所以考虑以下几种情况

  1. 链表长度为0
  2. 链表长度为1
  3. 长链表

对于1,2的情况 在23行处理

第三种情况,一开始将第二个节点作为当前节点(node)需要记录当前节点的前面节点 (pre)

然后在while中开始遍历节点,满足峰值条件的就删除当前node(峰值),不满足的就将当前节点和前面节点更新(28-29行)

最后将头节点返回即可

测试用例提供:{1,3,2,4,5,4,3,5,1} -》{1,2,4,4,3,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) {
        // write code here
        if(head==null||head.next==null) return head; //特殊情况处理
        ListNode pre = head, node = head.next;
        while(node.next!=null){
            if(node.val>pre.val&&node.val>node.next.val){
                //满足条件了 开始删除峰值
                pre.next = node.next;
                node = node.next;
            }else{
                pre = pre.next;
                node = node.next; //这一句其实可以提出来 到34行
            }
        }
        return head;
    }
}