Python中从链表中删除m个节点后的n个节点的程序

假设我们有一个链表,它的起始节点为“头”,以及两个整数 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 个节点之后的每个节点,因此最终链表将如下所示 -

示例(Python)

让我们看看以下实现以获得更好的理解 -

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,]