这道题和上面的反转链表其实是异曲同工的,主要考察链表遍历的操作,反转链表题解链接如上所示。
需要注意的是需要删除所有的峰值,所以要用到循环了
因为链表长度[0, 10000]所以考虑以下几种情况
- 链表长度为0
- 链表长度为1
- 长链表
对于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; } }