假设我们有一个链表,它的起始节点为“头”,以及两个整数 m 和 n。我们必须遍历列表并删除一些节点,例如前 m 个节点保留在列表中,删除前 m 个节点后的下一个 n 个节点。我们执行此操作直到遇到链表的末尾。我们从头节点开始,返回修改后的链表。
提供给我们的链表结构为 -
Node value : <integer> next : <pointer to next node>
所以,如果输入像 elements = [1, 2, 3, 4, 5, 6, 7, 8], m = 3, n = 1,那么输出将是 [1, 2, 3, 5, 6 , 7, ]
在此过程中删除 3 个节点之后的每个节点,因此最终链表将如下所示 -
让我们看看以下实现以获得更好的理解 -
class ListNode: def __init__(self, val=0, next=None): self.val= val self.next= next def make_list(elements): head = ListNode(elements[0]) for element in elements[1:]: ptr = head while ptr.next: ptr = ptr.next ptr.next= ListNode(element) return head def print_list(head): ptr = head print('[', end = "") while ptr: print(ptr.val, end = ", ") ptr = ptr.next print(']') def solve(head, m, n): prev = curr = head q = 0 p = 0 while curr: q += 1 if q == m: for i in range(n): ifcurr.nextis not None: curr = curr.next prev.next = curr.next q = 0 prev = prev.next curr = curr.next return head head = ListNode() elements = [1, 2, 3, 4, 5, 6, 7, 8] head = make_list(elements) res = solve(head, 3, 1) print_list(res)
[1, 2, 3, 4, 5, 6, 7, 8], 3, 1输出结果
[1, 2, 3, 5, 6, 7,]