Computer >> Máy Tính >  >> Lập trình >> Python

Chương trình xóa n nút sau m nút khỏi danh sách liên kết bằng Python

Giả sử chúng ta được cung cấp một danh sách liên kết có nút bắt đầu là "head", và hai số nguyên m và n. Chúng ta phải duyệt qua danh sách và xóa một số nút chẳng hạn như m nút đầu tiên được giữ trong danh sách và n nút tiếp theo sau khi m nút đầu tiên bị xóa. Chúng tôi thực hiện điều này cho đến khi gặp phần cuối của danh sách liên kết. Chúng tôi bắt đầu từ nút đầu và danh sách liên kết đã sửa đổi sẽ được trả về.

Cấu trúc danh sách liên kết được cung cấp cho chúng tôi là -

Node
   value : <integer>
   next : <pointer to next node>

Vì vậy, nếu đầu vào giống như các phần tử =[1, 2, 3, 4, 5, 6, 7, 8], m =3, n =1, thì đầu ra sẽ là [1, 2, 3, 5, 6 , 7,]

Chương trình xóa n nút sau m nút khỏi danh sách liên kết bằng Python

Mọi nút sau khi 3 nút bị xóa trong quá trình này, vì vậy cuối cùng danh sách được liên kết sẽ giống như bên dưới -

Chương trình xóa n nút sau m nút khỏi danh sách liên kết bằng Python

Để giải quyết vấn đề này, chúng tôi sẽ làm theo các bước sau -

  • trước:=đầu

  • curr:=đầu

  • q:=0

  • p:=0

  • trong khi curr không phải là null, thực hiện

    • q:=q + 1

    • nếu q giống với m thì

      • đối với tôi trong phạm vi từ 0 đến n, hãy thực hiện

        • nếu curr.next không phải là null thì

          • curr:=next of curr

      • tiếp theo của trước:=tiếp theo của curr

      • q:=0

    • trước:=tiếp theo của trước

    • curr:=next of curr

  • quay trở lại đầu

Ví dụ (Python)

Hãy cùng chúng tôi xem cách triển khai sau đây để hiểu rõ hơn -

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):
            if curr.next is 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)

Đầu vào

[1, 2, 3, 4, 5, 6, 7, 8], 3, 1

Đầu ra

[1, 2, 3, 5, 6, 7,]