Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> Python

โปรแกรมที่จะลบ n โหนดหลังจาก m โหนดจากรายการที่เชื่อมโยงในPython


สมมติว่าเราได้รับรายการเชื่อมโยงที่มีโหนดเริ่มต้นเป็น "หัว" และเลขจำนวนเต็มสองตัว m และ n เราต้องสำรวจรายการและลบโหนดบางโหนดเช่นโหนด m แรกจะถูกเก็บไว้ในรายการและโหนดถัดไป n โหนดหลังจาก m โหนดแรกถูกลบ เราดำเนินการนี้จนกว่าเราจะพบจุดสิ้นสุดของรายการที่เชื่อมโยง เราเริ่มจากเฮดโหนด และรายการลิงก์ที่แก้ไขจะถูกส่งคืน

โครงสร้างรายการที่เชื่อมโยงจะได้รับเป็น -

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

ดังนั้น หากอินพุตเป็นเหมือนองค์ประกอบ =[1, 2, 3, 4, 5, 6, 7, 8], m =3, n =1, ผลลัพธ์จะเป็น [1, 2, 3, 5, 6 , 7, ]

โปรแกรมที่จะลบ n โหนดหลังจาก m โหนดจากรายการที่เชื่อมโยงในPython

ทุกโหนดหลังจาก 3 โหนดจะถูกลบในกระบวนการนี้ ดังนั้นในท้ายที่สุดรายการที่เชื่อมโยงจะมีลักษณะดังนี้ -

โปรแกรมที่จะลบ n โหนดหลังจาก m โหนดจากรายการที่เชื่อมโยงในPython

เพื่อแก้ปัญหานี้ เราจะทำตามขั้นตอนเหล่านี้ -

  • ก่อนหน้า :=หัว

  • curr :=หัว

  • q :=0

  • p :=0

  • ในขณะที่สกุลเงินไม่เป็นโมฆะให้ทำ

    • q :=q + 1

    • ถ้า q เท่ากับ m แล้ว

      • สำหรับผมอยู่ในช่วง 0 ถึง n ทำ

        • ถ้า curr.next ไม่เป็นโมฆะ

          • curr :=ถัดไปของ curr

      • ถัดไปของก่อนหน้า :=ถัดไปของสกุลเงิน

      • q :=0

    • ก่อนหน้า :=ถัดไปของก่อนหน้า

    • curr :=ถัดไปของ curr

  • กลับหัว

ตัวอย่าง (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):
            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)

อินพุต

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

ผลลัพธ์

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