1474. Delete N Nodes After M Nodes of a Linked List

1472. Design Browser History #

题目 #

给定链表头结点 head 和两个整数 mn,遍历该链表并按照如下方式删除结点:

  • 开始时以头结点作为当前结点
  • 保留以当前结点开始的前 m 个结点
  • 删除接下来的 n 个结点
  • 重复步骤 23,直到到达链表结尾

在删除了指定结点之后,返回修改过后的链表头结点。

思路 #

代码 #

public class ListNode {
    int val;
    ListNode next;
    ListNode() {}
    ListNode(int val) { this.val = val; }
    LIstNOde(int val, ListNode next) { this.val = val; this.next = next; }
}

class Solution {
    public ListNode deleteNodes(ListNode head, int m, int n) {
        ListNode sentinel = new ListNode(-1, head);
        ListNode ptr = sentinel;
        
        while (ptr.next != null) {
            /** 保留前 m 个结点 */
            for (int i=0; i<m; i++) {
                if (ptr.next == null) return head;
                ptr = ptr.next;
            }
            /** 删除后 n 个结点 */
            for (int i=0; i<n; i++) {
                if (ptr.next == null) return head;
                ptr.next = ptr.next.next;
            }
        }
        return head;
    }
}