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, cur = head.next, next;
while (cur != null && cur.next != null) {
next = cur.next;
if (cur.val > pre.val && cur.val > next.val) {
cur.next = null;
pre.next = next;
} else {
pre = cur;
}
cur = next;
}
return head;
}
}
- 判断head边界值,如果链表节点数少于2个,则直接返回head;
- 定义3个指针分别指向:当前节点的前一个节点 pre、当前节点 next、当前节点的后一个节点 next;
- while循环执行:
- 条件:cur 不等于 null 且存在下一个节点时,首先记录 next = cur.next
- 比较:当前节点如果比前后节点的值都大,则删除当前节点
- 删除时,将当前节点断开:cur.next = null;将当前节点的前一个节点,指向当前节点的后一个节点:pre.next = nex;
- 否则,pre 移动到 cur,cur 移动到 next
- 最后循环结束,返回 head。