题解 | #删除链表峰值#
删除链表峰值
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) { // 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。
线性表基础 文章被收录于专栏
链表、递归、栈