1472. Design Browser History #
题目 #
给定链表头结点 head
和两个整数 m
和 n
,遍历该链表并按照如下方式删除结点:
- 开始时以头结点作为当前结点
- 保留以当前结点开始的前
m
个结点 - 删除接下来的
n
个结点 - 重复步骤
2
和3
,直到到达链表结尾
在删除了指定结点之后,返回修改过后的链表头结点。
思路 #
代码 #
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;
}
}