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

โปรแกรมค้นหารายการพับจากรายการเชื่อมโยงที่กำหนดใน Python


สมมติว่าเรามีรายการเชื่อมโยง เราต้องใช้ครึ่งแรกของรายการที่เชื่อมโยงและพับครึ่งหลังจากนั้นรวมโหนดที่ตัดกันโดยนำผลรวมของพวกมัน สุดท้ายเราต้องกลับหัวผลลัพธ์ของรายการที่เชื่อมโยง

ดังนั้น หากอินพุตเป็น [5,8,1,2,4,7,5] ผลลัพธ์จะเป็น [2, 5, 15, 10, ]

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

  • อุณหภูมิ :=0
  • ptr :=โหนด
  • ในขณะที่ ptr ไม่เป็นค่าว่าง ให้ทำ
    • อุณหภูมิ :=อุณหภูมิ + 1
    • ptr :=ถัดไปของ ptr
  • t :=ผลหารของอุณหภูมิ / 2
  • m :=โหนด
  • stk :=สแต็คใหม่
  • ในขณะที่ t ไม่ใช่ศูนย์ ให้ทำ
    • ดันค่าของ m เป็น stk
    • tmp :=ถัดจาก m
    • ถัดไปของ m :=null
    • ม :=tmp
    • t :=t - 1
  • โหนด :=ม
  • ถ้าอุณหภูมิเท่ากัน
    • m :=ถัดจาก m
  • ในขณะที่ m ไม่เป็นค่าว่าง ให้ทำ
    • ค่าของ m :=ค่าของ m + สแต็คองค์ประกอบด้านบน
    • ป๊อปจาก stk
    • m :=ถัดจาก m
  • โหนดส่งคืน

ให้เราดูการใช้งานต่อไปนี้เพื่อความเข้าใจที่ดีขึ้น -

ตัวอย่าง

class ListNode:
   def __init__(self, data, next = None):
      self.val = data
      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(']')
class Solution:
   def solve(self, node):
      temp = 0
      ptr = node
      while ptr:
         temp += 1
         ptr = ptr.next
      t = temp // 2
      m = node
      stk = []
      while t:
         stk.append(m.val)
         tmp = m.next
         m.next = None
         m = tmp
         t -= 1
      node = m
      if temp % 2 != 0:
         m = m.next
      while m:
         m.val += stk.pop()
         m = m.next
      return node
ob = Solution()
head = make_list([5,8,1,2,4,7,5])
print_list(ob.solve(head))

อินพุต

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

ผลลัพธ์

[2, 5, 15, 10, ]